利用JFreeChart生成多轴图表(7) (转自 JSP开发技术大全)
通过JFreeChart插件还可以生成拥有多个坐标轴的图表,简称多轴图表。在生成多轴图表时,必须通过绘图区对象,因为在JFreeChart中各种风格的统计图均是绘制在绘图区对象上的,一个绘图区对象可以接收多个坐标轴对象、数据集对象和绘图风格对象,向单轴图表中添加附加轴的基本步骤如下。
(1)创建一个坐标轴对象并添加到绘图区对象当中。
(2)将相应的绘图数据集对象添加到绘图区对象当中。
(3)通过绘图区对象将相应的绘图数据集对象和对应的坐标轴对象建立映射关系。
(4)创建一个用来描述绘图数据的图形对象,并添加到绘图区对象当中。
下面是一个多轴图表之双轴图表的典型应用,下面将以此讲解多轴图表的具体生成方法。
实例位置:光盘\mingrisoft\14\dxyy\01
该典型应用生成的多轴图表的效果如图14.10所示。
图14.10 利用JFreeChart生成多轴图表
因为在绘制多轴图表时,需要用到绘图区对象,所以在这里首先获得绘图区对象,代码如下:
CategoryPlot plot = chart.getCategoryPlot();
下面创建一个坐标轴对象,并添加到绘图区对象当中,代码如下:
ValueAxis axis1 = new NumberAxis("季度销售汇总 单位:万册");
plot.setRangeAxis(1, axis1);
在创建坐标轴对象时,入口参数为坐标轴的名称。在通过绘图区对象的setRangeAxis()方法将坐标轴对象添加到绘图区时,需要提供两个入口参数,第一个为坐标轴的索引位置,要求为正整数,绘图区默认的坐标轴索引为“0”,所以这里将其设为“1”;第二个为坐标轴对象。
下面的代码负责封装绘图数据集,并将其添加到绘图区对象当中,代码如下:
DefaultCategoryDataset dataset1 = new DefaultCategoryDataset();
// 封装绘图数据集的具体代码略
plot.setDataset(1, dataset1);
在通过绘图区对象的setDataset()方法将绘图数据集对象添加到绘图区时,同样需要提供两个入口参数,第一个为数据集的索引位置,要求为正整数,绘图区默认的绘图数据集索引为“0”,所以这里将其设为“1”;第二个为绘图数据集对象。
下面需要将绘图数据集对象和欲采用的坐标轴对象建立映射关系,方法如下:
plot.mapDatasetToRangeAxis(1, 1);
在通过绘图区对象的mapDatasetToRangeAxis()方法将绘图数据集对象和坐标轴对象建立映射关系时,同样需要提供两个入口参数,第一个为数据集的索引位置;第二个为坐标轴的索引位置。
注意:并不是索引位置相同的绘图数据集和坐标轴是一一对应的,如果不为索引位置为非0的绘图数据集映射对应的坐标轴,JFreeChart默认采用索引位置为0的坐标轴,所以,也可以利用一个坐标轴来描述图形对象的数据信息。
最后,创建一个用来描述绘图数据的图形对象,并添加到绘图区对象当中,代码如下:
CategoryItemRenderer renderer1 = new LineAndShapeRenderer();
renderer1.setSeriesPaint(0, Color.BLACK);
plot.setRenderer(1, renderer1);
注意:用来描述绘图数据的图形对象和绘图数据集的索引是一一对应的。