基于MVC4+EasyUI的Web开发框架经验总结(4)--使用图表控件Highcharts

来源:互联网 发布:mysql 查看版本号 编辑:程序博客网 时间:2024/05/23 01:03

基于MVC4+EasyUI的Web开发框架经验总结(4)--使用图表控件Highcharts

在我们做各种应用的时候,我们可能都会使用到图表统计,以前接触过一些不同的图表控件,在无意中发现了图表控件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 themevar 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处理数据交互的几种方式

基于MVC4+EasyUI的Web开发框架经验总结(13)--DataGrid控件实现自动适应宽带高度

基于MVC4+EasyUI的Web开发框架经验总结(14)--自动生成图标样式文件和图标的选择操作

主要研究技术:代码生成工具、会员管理系统、客户关系管理软件、病人资料管理软件、Visio二次开发、酒店管理系统、仓库管理系统等共享软件开发
专注于Winform开发框架/混合式开发框架、Web开发框架、Bootstrap开发框架、微信门户开发框架的研究及应用。
  转载请注明出处:
撰写人:伍华聪  http://www.iqidi.com 
    
标签: Web开发框架
好文要顶 关注我 收藏该文  
伍华聪
关注 - 68
粉丝 - 7053
+加关注
20
1
« 上一篇:C#开发微信门户及应用(11)--微信菜单的多种表现方式介绍
» 下一篇:C#开发微信门户及应用(12)-使用语音处理

posted on 2014-05-19 12:10 伍华聪 阅读(36020) 评论(21) 编辑 收藏

评论

#1楼   

顶一个
支持(0)反对(0)
2014-05-19 13:07 | 飞飞O(∩_∩)  

#2楼   

顶二个。
支持(0)反对(0)
2014-05-19 14:06 | 黑 瞳  

#3楼   

~~木有看出来MVC4在哪里
支持(0)反对(0)
2014-05-19 14:16 | new_StringBuffer  

#4楼[楼主]   

@ 齐莫良
引用~~木有看出来MVC4在哪里

所有方式都差不多,不过我的代码是来源于MVC项目,所以路径可能有所不同。
支持(0)反对(0)
2014-05-19 15:08 | 伍华聪  

#5楼[楼主]   

终于看到很多人的支持了,呵呵
支持(0)反对(0)
2014-05-19 15:08 | 伍华聪  

#6楼   

Highcharts还是很号用的!
支持(0)反对(0)
2014-05-19 15:44 | 望月归来  

#7楼[楼主]   

@ 望月归来
引用Highcharts还是很号用的!

是的,用了一次就会不舍得了。
支持(0)反对(0)
2014-05-19 15:45 | 伍华聪  

#8楼   

Highcharts是收费的呀,楼主这个怎么处理的?
支持(0)反对(0)
2014-05-20 08:50 | junjieok  

#9楼   

请问楼主有没有遇到过这样的问题,IE8下,图表元素以iframe内嵌的方式放到一个父级页面中以后,在图表类型为line时,两条或两条线以上的情况下,tooltip死活显示不出来了,chrome,FF,IE8+都没问题,就是IE8和IE7,而且更离奇的是把页面从iframe中单独的拿出来竟然又好了...
我搞了一天也没发现哪里有问题,如果楼主知道怎么回事能不能回复下,感激不尽
支持(0)反对(0)
2014-05-20 10:13 | CodingJunior  

#10楼[楼主]   

@ CodingJunior
引用请问楼主有没有遇到过这样的问题,IE8下,图表元素以iframe内嵌的方式放到一个父级页面中以后,在图表类型为line时,两条或两条线以上的情况下,tooltip死活显示不出来了,chrome,FF,IE8+都没问题,就是IE8和IE7,而且更离奇的是把页面从iframe中单独的拿出来竟然又好了...我搞了一天也没发现哪里有问题,如果楼主知道怎么回事能不能回复下,感激不尽

看来比较有趣,不过我没碰到过,有机会再看看。
支持(0)反对(0)
2014-05-20 10:41 | 伍华聪  

#11楼   

有时候数据量大的时候,图表出来的比较慢。是不是获取数据慢还是渲染慢。
支持(0)反对(0)
2014-05-20 13:32 | 程序员——屌丝  

#12楼   

不错的图表库。题目改下就更好了。顶个
支持(0)反对(0)
2014-05-23 08:53 | 御煜之屋  

#13楼   

发现楼主和我开发框架选择一样的。。。,Highchart确实挺方便,使用也不复杂
支持(0)反对(0)
2014-05-28 10:29 | 豆花菜  

#14楼   

good 学习了
支持(0)反对(0)
2014-06-29 17:02 | Arthur.Wang  

#15楼   

看起来挺强大,有机会学学。
有个问题,这种纯javascript的图表,下载成xxx图片或Pdf也是直接封装好了?不用后台再重新生成图片了吗?
支持(0)反对(0)
2014-09-19 08:41 | 水无声  

#16楼   

Highcharts demo教程源代码下载:http://zuidaima.com/share/khighcharts-p1-s1.htm
支持(0)反对(0)
2014-09-25 14:50 | springmvc168  

#17楼   

楼主,请教一下你后台代码的格式是怎么样的啊?能说一下吗
支持(1)反对(0)
2015-01-28 11:06 | Imlearner  

#18楼   

博主,求源码,后者后台数据格式
支持(0)反对(0)
2015-08-03 17:34 | 追忆~逐梦  

#19楼   

ding
支持(0)反对(0)
2015-08-22 23:10 | 涛褪荒芜  

#20楼   

就是吊
支持(0)反对(0)
2016-01-20 11:07 | 冯小牛  

#21楼   

楼主,你好!!!
麻烦发一份页面源码给我,参考学习一下;最好有数据DEMO;
十分感谢!
邮箱:goodyxd2003@163.com
支持(0)反对(0)
2017-05-03 14:41 | Tony先生  
阅读全文
0 0