利用JFreeChart生成组合图表 (8) (转自 JSP开发技术大全)

14.8 利用JFreeChart生成组合图表

 实例位置:光盘\mingrisoft\14\dxyy\02

通过JFreeChart插件还可以生成拥有多个绘图区的图表,简称组合图表,在生成组合图表时,必须通过绘图区对象,因为JFreeChart允许向绘图区对象中添加子绘图区对象。

下面是一个组合图表的典型应用,下面将以此讲解组合图表的具体生成方法。

分析一下图14.11中的两个绘图区,每个绘图区拥有各自的X轴,该图左侧的Y轴为两个绘图区共用的Y轴,使用该Y轴的图例有“涨幅百分比”和“今日涨幅之最”,图例“今日股价之最”使用右侧的Y轴,右侧的Y轴为右侧绘图区的附加轴,生成原理同14.7节,然后看一下图14.11的具体生成方法。

该典型应用生成的组合图表的效果如图14.11所示。

图14.11 利用JFreeChart生成组合图表

程序实现过程如下。

(1)首先定义右侧子绘图区,代码如下:

// 创建一个绘图区对象

XYPlot plot1 = new XYPlot();

// 定义独立的X轴

DateAxis axis1 = new DateAxis("今日之最");

DateTickUnit unit1 = new DateTickUnit(DateTickUnit.HOUR, 1, new SimpleDateFormat("HH"));

axis1.setTickUnit(unit1);

plot1.setDomainAxis(axis1);

// 因为共用Y轴,所以将其设为空

plot1.setRangeAxis(null);

// 设定绘图数据集,数据集在前面已经封装完毕,这里不再详细介绍

plot1.setDataset(dataset1);

// 定义绘图风格

XYLineAndShapeRenderer xyArea1 = new XYLineAndShapeRenderer();

plot1.setRenderer(xyArea1);

(2)在右侧的绘图区中添加一个附加轴,用来统计股票的具体价格,代码如下:

// 创建附加轴对象,并添加到绘图区

ValueAxis axis11 = new NumberAxis("股票价格(单位:元 / 股)");

axis11.setUpperBound(30.0);      // 设置Y轴最大值

axis11.setLowerBound(10.0);      // 设置Y轴最小值

plot1.setRangeAxis(1, axis11);

// 创建与附加轴对应的数据集,并添加到绘图区

TimeSeries timeSeries11 = new TimeSeries("今日股价之最", Minute.class);

timeSeries11.add(startMinute, yesterdayValue);

timeSeries11.add(minMinute, yesterdayValue + yesterdayValue * minPercent);

timeSeries11.add(maxMinute, yesterdayValue + yesterdayValue * maxPercent);

timeSeries11.addOrUpdate(endMinute, yesterdayValue + yesterdayValue * endPercent);

IntervalXYDataset dataset11 = new TimeSeriesCollection(timeSeries11);

plot1.setDataset(1, dataset11);

// 将绘图数据集映射到附加轴上

plot1.mapDatasetToRangeAxis(1, 1);

// 定义附加轴的绘图风格,这里为折线

XYLineAndShapeRenderer xyArea11 = new XYLineAndShapeRenderer();

plot1.setRenderer(1, xyArea11);

(3)定义左侧子绘图区,代码如下:

// 创建一个绘图区对象

XYPlot plot2 = new XYPlot();

// 定义独立的X轴

DateAxis axis2 = new DateAxis("统计时间");

DateTickUnit unit2 = new DateTickUnit(DateTickUnit.MINUTE, 30,

new SimpleDateFormat("HH:mm"));

axis2.setTickUnit(unit2);

plot2.setDomainAxis(axis2);

// 因为共用Y轴,所以将其设为空

plot2.setRangeAxis(null);

// 设定绘图数据集,数据集在前面已经封装完毕,这里不再详细介绍

plot2.setDataset(dataset2);

// 定义绘图风格

XYAreaRenderer xyArea2 = new XYAreaRenderer();

plot2.setRenderer(xyArea2);

(4)定义父绘图区,代码如下:

// 创建一个绘图区对象

CombinedRangeXYPlot plot = new CombinedRangeXYPlot();

// 定义共用坐标轴

NumberAxis axis = new NumberAxis("股票涨幅百分比");

axis.setTickUnit(new NumberTickUnit(0.025,new DecimalFormat("0.0%")));//定义度量值风格

plot.setRangeAxis(axis);

// 添加子绘图区

plot.add(plot2, 5);

plot.add(plot1, 2);

    说明:在通过绘图区对象的add()方法添加子绘图区对象时,第一个入口参数为欲添加的子绘图区对象,第二个入口参数为该绘图区所占的比例,上面代码的意思是plot2占5/7,plot1占2/7,还需要注意的是,绘图区从左到右的排列顺序是由添加子绘图区的先后顺序决定的。

下面的代码是通过上面的父绘图区对象生成图表,并获得浏览路径:

// 创建图表

JFreeChart chart = new JFreeChart(chartTitle, plot);

// 添加图表副标题

chart.addSubtitle(new TextTitle(subtitle));

// 固定用法

ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());

// 生成指定格式的图片,并返回图片名称

String fileName = ServletUtilities.saveChartAsPNG(chart, width, height, info, session);

// 返回图片浏览路径

return servletURI + "?filename=" + fileName;

至此,一个组合图表就绘制完成了,这里绘制的是共用Y轴的组合图表,同样也可以绘制出共用X轴的组合图表。

利用JFreeChart生成组合图表 (8) (转自 JSP开发技术大全)的更多相关文章

  1. 利用JFreeChart生成时序图(6) (转自 JSP开发技术大全)

    利用JFreeChart生成时序图(6) (转自 JSP开发技术大全) 14.6 利用JFreeChart生成时序图 通过JFreeChart插件只能生成普通效果的时序图,利用工厂类ChartFact ...

  2. 利用JFreeChart生成区域图 (5) (转自 JSP开发技术大全)

    利用JFreeChart生成区域图 (5) (转自 JSP开发技术大全) 14.5 利用JFreeChart生成区域图 通过JFreeChart插件只能生成普通效果的区域图,利用工厂类ChartFac ...

  3. 利用JFreeChart生成折线图 (4) (转自 JSP开发技术大全)

    利用JFreeChart生成折线图 (4) (转自 JSP开发技术大全) 14.4 利用JFreeChart生成折线图 通过JFreeChart插件,既可以生成普通效果的折线图,也可以生成3D效果的折 ...

  4. JFreeChart生成饼形图(3)11 (转自 JSP开发技术大全)

    FreeChart生成饼形图(3) (转自 JSP开发技术大全) 14.3 利用JFreeChart生成饼形图 通过JFreeChart插件,即可以生成普通效果的饼形图,也可以生成3D效果的饼形图:如 ...

  5. 利用JFreeChart生成多轴图表(7) (转自 JSP开发技术大全)

    利用JFreeChart生成多轴图表(7) (转自 JSP开发技术大全) 14.7 利用JFreeChart生成多轴图表 通过JFreeChart插件还可以生成拥有多个坐标轴的图表,简称多轴图表.在生 ...

  6. JFreeChart生成饼形图(3) (转自 JSP开发技术大全)

    JFreeChart生成饼形图(3) (转自 JSP开发技术大全) 14.3 利用JFreeChart生成饼形图 通过JFreeChart插件,即可以生成普通效果的饼形图,也可以生成3D效果的饼形图: ...

  7. JFreeChart生成柱形图(2) (转自 JSP开发技术大全)

    JFreeChart生成柱形图(2) (转自 JSP开发技术大全) 14.2 利用JFreeChart生成柱形图14.2.1 利用DefaultCategoryDataset数据集绘制柱形图 通过JF ...

  8. JFreeChart基础(1) (转自 JSP开发技术大全)

    JFreeChart基础(1) (转自 JSP开发技术大全) JFreeChart是一个Java开源项目,是一款优秀的Java图表生成插件,它提供了在Java Application.Servlet和 ...

  9. 使用poi和jfreechart生成excel图表图片

    最近项目在频繁的操作excel,里边涉及到很多和图表有关的东西.有时候需要使用java操作excel自带的图标,比较复杂的我们都是使用excel模板的形式实现. 除此之外,也有一些功能只需要生成对应的 ...

随机推荐

  1. 多.h项目出现的问题:使用了预编译头依然出现error LNK2005:***obj已在***obj中定义与c++ error C2011: “xxx”:“class”类型重定义解决办法

    使用了预编译头依然出现error LNK2005:***obj已在***obj中定义 造成该问题的可能性比较多,本人将在今后遇到时添加进来,今天先放出本人遇到的一种情况. 多重包含含有变量定义的.h文 ...

  2. 集训第五周动态规划 H题 回文串统计

    Hrdv is interested in a string,especially the palindrome string.So he wants some palindrome string.A ...

  3. 数据库SQL实战练习

    http://blog.csdn.net/iamyvette/article/details/77151925

  4. 九度oj 题目1062:分段函数

    题目1062:分段函数 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3874 解决:2278 题目描述: 编写程序,计算下列分段函数y=f(x)的值.y=-x+2.5; 0<=x& ...

  5. HDU 2815 扩展baby step giant step 算法

    题目大意就是求 a^x = b(mod c) 中的x 用一般的baby step giant step 算法会超时 这里参考的是http://hi.baidu.com/aekdycoin/item/2 ...

  6. hdu 1698区间延迟更新

    #include<stdio.h> #define N 100100 struct node { int x,y,yanchi; }a[N*4];//注意数组范围 void build(i ...

  7. hdu 4771好题

    #include<stdio.h> #include<string.h>//通过只记录每一步此时点的状态.题非常好 #include<queue> using na ...

  8. JVM 总结

    面试 java 虚拟机 jvm 基础 jvm Write Once Run EveryWhere >jar 包可以在任何兼容jvm上运行 >jvm 适配器 屏蔽掉底层差异 >内存管理 ...

  9. 用JQ实现基础的添加,插入,删除功能。

    在eclipse里面运行代码即可,如果您是其他应用,请选择对您有帮助的代码即可,如果有写错或不懂的地方请联系QQ:1633420056,谢谢,祝学习进步 <!DOCTYPE html>&l ...

  10. oracle删除表前先判断表是否存在

     DECLARE  numbe NUMBER;BEGIN  SELECT COUNT(1)    INTO numbe    FROM USER_TABLES   WHERE TABLE_NAME = ...