读书人

HighCharts 使用

发布时间: 2013-01-28 11:49:56 作者: rapoo

HighCharts 应用

介绍Highcharts的2个地方的改进之处。

????1、是在柱状图中为每个柱子设置不同的颜色;

????2、是改造highchars自带的图表下载功能。

?

?????1.?在柱状图中给每块柱子设置七彩斑斓的颜色,做完之后,可以在饼状图,折线图等图表上实现相同的效果:在Highcharts自带的例子中如column-basic.htm中,相同属性的柱子只有1种默认的颜色可以设置,在遇到要求同一个柱子使用不同色彩的时候,higcharts的demo和example中没有给出解决办法:?

HighCharts 使用

如果我们要实现:?

HighCharts 使用

?????这种效果,就需要对数据结构做个特殊处理.

?????首先了解一下highcharts接收的json数据格式:

?????charts\[\d+\]\.name,

?????charts\[\d+\]\.data\[\d+\]?

HighCharts 使用

?????Charts是一个list类型的结构,data是一个数组,数组中的对象可以是map,也可以是int 或者string类型的,它表示了Y轴对应的一些参数属性。Chartscategories表示图表中的x轴的对应的名称;在java中构造出这个数据结构后,生成json数据发给highcharts就可以在页面上生成图表了。?

前端页面的代码如下:

function gethighcharts(obj){

???????????????????var chart;

???????????????????var options = {

???????????????????????????????????chart: {

???????????????????????????????????????renderTo: 'containerdata',

???????????????????????????????????????defaultSeriesType: 'column',

???????????????????????????????????????marginRight: 100,

???????????????????????????????????????marginBottom: 25

????????????????????????????????????},

????????????????????????????????????title: {

???????????????????????????????????????text: '各科成绩得分比较',

???????????????????????????????????????x: -20 //center

????????????????????????????????????},

????????????????????????????????????subtitle: {

???????????????????????????????????????text: '',

???????????????????????????????????????x: -20

????????????????????????????????????},

????????????????????????????????????xAxis: {

???????????????????????????????????????categories: []

????????????????????????????????????},

????????????????????????????????????yAxis: {

???????????????????????????????????????minorTickInterval: 'auto',

???????????????????????????????????????title: {

????????????????????????????????????????????text: '分数'

???????????????????????????????????????},

???????????????????????????????????????plotLines: [{

????????????????????????????????????????????value: 0,

????????????????????????????????????????????width: 1,

????????????????????????????????????????????color: '#808080'

???????????????????????????????????????}]

????????????????????????????????????},

????????????????????????????????????tooltip: {

???????????????????????????????????????formatter: function() {

?????????????????????????????????????????return '<b>'+this.series.name +'</b><br/>'+

?????????????????????????????????????????this.x +': '+ this.y ;

???????????????????????????????????????}

????????????????????????????????????},

????????????????????????????????????legend: {

???????????????????????????????????????layout: 'vertical',

???????????????????????????????????????align: 'right',

???????????????????????????????????????verticalAlign: 'top',

???????????????????????????????????????x: -10,

???????????????????????????????????????y: 100,

???????????????????????????????????????borderWidth: 0

????????????????????????????????????},

????????????????????????????????????series: []

????????????????????????????};

?

同时在页面需要引入对应的js库文件?????????????????????????????????????????????????????????????????????

<script type="text/javascript" src="js/highcharts/highcharts.js"></script>

<script type="text/javascript" src="js/highcharts/exporting.js"></script>

?????通过测试时发现,在charts的data结构中,给每个map再加入一个color属性就可以使得每个柱状图有不同的颜色,对应的json数据的格式改为如下就可以:

HighCharts 使用

?????对于每个柱状图的颜色可以预先在一个java对象中定义好,然后每次循环赋值给柱子就行了,比如我在程序中预先定义好了9种颜色,每次生成data数据时候就循环插入color的值就可以了

String[] colors = {"#4572A7", "#AA4643", "#89A54E", "#80699B", "#3D96AE", "#DB843D", "#92A8CD", "#A47D7C", "#B5CA92"};?

?

2.?改造Highcharts的图表的下载功能:?

?????在Highcharts中使用自带的下载功能的时候,它会在下载弹出框中显示来自于export.higcharts.com字样,在图表的右下角也会有显示HightChart.com的超链接字样,在我们的项目中,很明显需要将这两处地方进行替换,将这两个地址转换为我们自己的域名地址。

HighCharts 使用

?????于是我们进行尝试,在该插件的JS库文件exporting.js文件中将相关字样转为我们自己的域名,在其第8行的位置,我们将导出功能的英文提示改换为了汉字提示,然后在第10行将highcharts的域名换为了我们自己的域名:如:

HighCharts 使用

HighCharts 使用



???????但是经过这样一改之后,运行程序后,下载功能完全失效,不能再用了。经过仔细分析,发现http://export.highcharts.com/这个地址不仅仅是一个简单的域名表示,而且它是一段PHP的超链接的URI地址(类似于java中的servlet地址),它的作用是将highcharts图表所用的参数传递给这个URI地址,由该URI来生成指定格式的图片,然后以IO流的形式返回给用户下载该图片,用google在highcharts的论坛上查找源代码,发现了其处理的步骤,于是参照了之前的程序用java的servlet仿写一个对应的处理程序,因为要完全以参数来生成图片,所有用到了很多的开源的jar包,都是从网上找到,花了很久的时间,jar包列表如下:

??????核心的处理jar包是batik-codec.jar,它是apache项目组下面的一个专门用来处理图形生成技术的开源产品:

The?Apache XML Graphics Project?currently consists of the following sub-projects, each focused on a different aspect of XML Graphics:

读书人网 >开源软件

热点推荐