在我們做各種應用的時候,我們可能都會使用到圖表統計,以前接觸過一些不同的圖表控件,在無意中發現了圖表控件Highcharts,其強大的功能和豐富的互動效果,令人難以忘懷。本篇主要介紹在Web開發中使用圖表控件Highcharts,以及對其進行統一漢化等操作,讓我們的程序功能更加豐富,內容更加美觀。
1、Highcharts基礎介紹
Highcharts是一個非常流行,界面美觀的純Javascript圖表庫。它主要包括兩個部分:Highcharts和Highstock。Highcharts可以為您的網站或Web應用程序提供直觀,互動式的圖表。目前支持線,樣條,面積,areaspline,柱形圖,條形圖,餅圖和散點圖類型。Highstock可以為您方便地建立股票或一般的時間軸圖表。它包括先進的導航選項,預設的日期范圍,日期選擇器,滾動和平移等等。
HIghChartS官網:http://www.highcharts.com/
HighCharts Demo:http://www.highcharts.com/demo/
Highcharts支持曲線圖、餅圖、柱狀圖、儀表圖、散點圖等等幾十種圖形,界面展示效果非常豐富,3D效果也很好看。列出幾個供參考下吧

Highcharts使用jQuery等Javascript框架來處理基本的Javascript任務。因此,在使用Highcharts之前,需要在頁面頭部引用這些腳本文件。如果你使用jQuery作為基本框架,那么你需要在頁面頭部同時引用jQuery和Hightcharts兩個文件就可以了。
由於我在Web開發框架中,主要采用了MVC+EasyUI的方式,因包含的文件如下所示。
@*添加Jquery,EasyUI和easyUI的語言包的JS文件*@ <script type="text/javascript" src="~/Content/JqueryEasyUI/jquery.min.js"></script> <script type="text/javascript" src="~/Content/JqueryEasyUI/jquery.easyui.min.js"></script> <script type="text/javascript" src="~/Content/JqueryEasyUI/locale/easyui-lang-zh_CN.js"></script> @*圖表JS文件應用*@ <script src="~/Content/JQueryTools/Highcharts/js/highcharts.js"></script>
但是為了更好的展示效果,我們一般添加一個圖標預定義的樣式進去,同時添加導出功能的腳本,如下所示。
@*圖表JS文件應用*@ <script src="~/Content/JQueryTools/Highcharts/js/highcharts.js"></script> <script src="~/Content/JQueryTools/Highcharts/js/modules/exporting.js"></script> <script src="~/Content/JQueryTools/Highcharts/js/themes/grid.js"></script>
當然,如果我們散點圖、3D圖形等內容,還需要引入一些額外的js文件的
<script src="~/Content/JQueryTools/Highcharts/js/highcharts-more.js"></script> <script src="~/Content/JQueryTools/Highcharts/js/highcharts-3d.js"></script>
2、圖表的生成操作
前面說了,這個圖表控件主要就是使用Jquery和Javascript來實現,我們來分析下一個餅圖的Demo代碼。
$(function () { $('#container').highcharts({ chart: { plotBackgroundColor: null, plotBorderWidth: null, plotShadow: false }, title: { text: 'Browser market shares at a specific website, 2014' }, tooltip: { pointFormat: '{series.name}: <b>{point.percentage:.1f}%</b>' }, plotOptions: { pie: { allowPointSelect: true, cursor: 'pointer', dataLabels: { enabled: true, format: '<b>{point.name}</b>: {point.percentage:.1f} %', style: { color: (Highcharts.theme && Highcharts.theme.contrastTextColor) || 'black' } } } }, series: [{ type: 'pie', name: 'Browser share', data: [ ['Firefox', 45.0], ['IE', 26.8], { name: 'Chrome', y: 12.8, sliced: true, selected: true }, ['Safari', 8.5], ['Opera', 6.2], ['Others', 0.7] ] }] }); });
上面的腳本主要就是根據series屬性里面的數據進行生成餅圖的,那么我們實際開發的時候,數據肯定不是固定的,一般我們是通過動態方式賦值的。
如我一般傾向於使用Jquery的Ajax方式,調用后台獲得數據,然后進行綁定的。那么這種情況下,如何操作腳本了呢,我們來分析看看。
首先我們先在腳本函數里面,初始化一個chart對象,並把其中涉series數據data設置為空就是了。
var chart1 = new Highcharts.Chart({ chart: { renderTo: "container1", plotBackgroundColor: null, plotBorderWidth: null, plotShadow: false, }, title: { text: '集團分子公司人員組成' }, tooltip: { pointFormat: '{series.name}: <b>{point.y}</b>' }, plotOptions: { pie: { allowPointSelect: true, cursor: 'pointer', dataLabels: { enabled: true, format: '<b>{point.name}</b>: {point.percentage:.1f} %', style: { color: (Highcharts.theme && Highcharts.theme.contrastTextColor) || 'black' } }, //showInLegend: true } }, series: [{ type: 'pie', name: '人員數量', data: [] }] });
第二步是通過Ajax調用后台連接獲得數據,然后綁定到具體的屬性上就可以了,具體代碼如下所示。
//通過Ajax獲取圖表1數據 $.ajaxSettings.async = false; var data1 = []; $.getJSON("/User/GetCompanyUserCountJson", function (dict) { for (var key in dict) { if (dict.hasOwnProperty(key)) { data1.push([key, dict[key]]); } }; chart1.series[0].setData(data1); });
而圖表的HTML代碼則是如下所示,主要就是新增一個div,id為container1,用來放置圖表就是了。
<div class="box"> <div class="box-title"> <div style="float: left"> <img src="~/Content/JqueryEasyUI/themes/icons/customed/user.png" alt="" width="20" height="20" /> 圖表1 </div> <div style="float: right; padding-right: 10px;">更多</div> </div> <div class="box-content" style="height: 310px"> <div id="container1" style="height: 300px;max-width:500px"></div> </div> </div>
完成以上的代碼,我們運行就可以看到下面的圖形了,這樣看起來是不是比較酷一些呢。

3、圖表的導出功能及菜單漢化
從上面的圖表里面看到,每個圖表的右上角,都有一個菜單的功能,里面有一些功能,如打印圖片、導出圖片等操作,具體菜單的表現如下所示。

但是上面的菜單式我經過了漢化處理的, 默認的顯示效果是英文的,如下所示。

顯然英文的菜單,不是我們希望的,我們需要漢化一下才更好,那么如何漢化上面的通用菜單呢,需要每個模塊都重復一樣的漢化嗎,當然不需要了。我們可以把它放到全局設置里面。
前面我們介紹了,為了使得圖表展示更好的效果,我們包含了一個grid.js的圖表樣式,其實里面也還有其他樣式可以使用的,不過我覺得還是grid.js的樣式最佳,如下所示。

那么既然使用了這個樣式設置,我們把全局的一些設置,如漢化的操作,也放到這里就可以了。
我們在這個文件的底部,增加一個SetOption的操作代碼就可以,這些漢化的菜單,由於我使用了最新版本,有些參數是和舊版本不一致的,所以沖着這個辛苦勁,應該推薦鼓勵下哦。呵呵
設置漢化的代碼。如下所示。
// Apply the theme var highchartsOptions = Highcharts.setOptions(Highcharts.theme); //漢化圖表菜單 Highcharts.setOptions({ lang: { contextButtonTitle: "圖表菜單", printChart: "打印圖片", downloadJPEG: "下載JPEG 圖片", downloadPDF: "下載PDF文檔", downloadPNG: "下載PNG 圖片", downloadSVG: "下載SVG 矢量圖", exportButtonTitle: "導出圖片" } });
基於MVC4+EasyUI的Web開發框架的系列文章:
基於MVC4+EasyUI的Web開發框架形成之旅--總體介紹
基於MVC4+EasyUI的Web開發框架形成之旅--MVC控制器的設計
基於MVC4+EasyUI的Web開發框架形成之旅--界面控件的使用
基於MVC4+EasyUI的Web開發框架形成之旅--附件上傳組件uploadify的使用
基於MVC4+EasyUI的Web開發框架形成之旅--框架總體界面介紹
基於MVC4+EasyUI的Web開發框架形成之旅--基類控制器CRUD的操作
基於MVC4+EasyUI的Web開發框架形成之旅--權限控制
基於MVC4+EasyUI的Web開發框架經驗總結(1)-利用jQuery Tags Input 插件顯示選擇記錄
基於MVC4+EasyUI的Web開發框架經驗總結(2)- 使用EasyUI的樹控件構建Web界面
基於MVC4+EasyUI的Web開發框架經驗總結(3)- 使用Json實體類構建菜單數據
基於MVC4+EasyUI的Web開發框架經驗總結(4)--使用圖表控件Highcharts
基於MVC4+EasyUI的Web開發框架經驗總結(5)--使用HTML編輯控件CKEditor和CKFinder
基於MVC4+EasyUI的Web開發框架經驗總結(6)--在頁面中應用下拉列表的處理
基於MVC4+EasyUI的Web開發框架經驗總結(7)--實現省份、城市、行政區三者聯動
基於MVC4+EasyUI的Web開發框架經驗總結(8)--實現Office文檔的預覽
基於MVC4+EasyUI的Web開發框架經驗總結(9)--在Datagrid里面實現外鍵字段的轉義操作
基於MVC4+EasyUI的Web開發框架經驗總結(10)--在Web界面上實現數據的導入和導出
基於MVC4+EasyUI的Web開發框架經驗總結(11)--使用Bundles處理簡化頁面代碼
基於MVC4+EasyUI的Web開發框架經驗總結(12)--利用Jquery處理數據交互的幾種方式
