利用JFreeChart生成组合图表 (8) (转自 JSP开发技术大全)
利用JFreeChart生成组合图表 (8) (转自 JSP开发技术大全)
实例位置:光盘\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开发技术大全)的更多相关文章
- 利用JFreeChart生成时序图(6) (转自 JSP开发技术大全)
利用JFreeChart生成时序图(6) (转自 JSP开发技术大全) 14.6 利用JFreeChart生成时序图 通过JFreeChart插件只能生成普通效果的时序图,利用工厂类ChartFact ...
- 利用JFreeChart生成区域图 (5) (转自 JSP开发技术大全)
利用JFreeChart生成区域图 (5) (转自 JSP开发技术大全) 14.5 利用JFreeChart生成区域图 通过JFreeChart插件只能生成普通效果的区域图,利用工厂类ChartFac ...
- 利用JFreeChart生成折线图 (4) (转自 JSP开发技术大全)
利用JFreeChart生成折线图 (4) (转自 JSP开发技术大全) 14.4 利用JFreeChart生成折线图 通过JFreeChart插件,既可以生成普通效果的折线图,也可以生成3D效果的折 ...
- JFreeChart生成饼形图(3)11 (转自 JSP开发技术大全)
FreeChart生成饼形图(3) (转自 JSP开发技术大全) 14.3 利用JFreeChart生成饼形图 通过JFreeChart插件,即可以生成普通效果的饼形图,也可以生成3D效果的饼形图:如 ...
- 利用JFreeChart生成多轴图表(7) (转自 JSP开发技术大全)
利用JFreeChart生成多轴图表(7) (转自 JSP开发技术大全) 14.7 利用JFreeChart生成多轴图表 通过JFreeChart插件还可以生成拥有多个坐标轴的图表,简称多轴图表.在生 ...
- JFreeChart生成饼形图(3) (转自 JSP开发技术大全)
JFreeChart生成饼形图(3) (转自 JSP开发技术大全) 14.3 利用JFreeChart生成饼形图 通过JFreeChart插件,即可以生成普通效果的饼形图,也可以生成3D效果的饼形图: ...
- JFreeChart生成柱形图(2) (转自 JSP开发技术大全)
JFreeChart生成柱形图(2) (转自 JSP开发技术大全) 14.2 利用JFreeChart生成柱形图14.2.1 利用DefaultCategoryDataset数据集绘制柱形图 通过JF ...
- JFreeChart基础(1) (转自 JSP开发技术大全)
JFreeChart基础(1) (转自 JSP开发技术大全) JFreeChart是一个Java开源项目,是一款优秀的Java图表生成插件,它提供了在Java Application.Servlet和 ...
- 使用poi和jfreechart生成excel图表图片
最近项目在频繁的操作excel,里边涉及到很多和图表有关的东西.有时候需要使用java操作excel自带的图标,比较复杂的我们都是使用excel模板的形式实现. 除此之外,也有一些功能只需要生成对应的 ...
随机推荐
- 笔试算法题(34):从数字序列中寻找仅出现一次的数字 & 最大公约数(GCD)问题
出题:给定一个数字序列,其中每个数字最多出现两次,只有一个数字仅出现了一次,如何快速找出其中仅出现了一次的数字: 分析: 由于知道一个数字异或操作它本身(X^X=0)都为0,而任何数字异或操作0都为它 ...
- 使用TensorRT加速yolo3
一.TensorRT支持的模型: TensorRT 直接支持的model有ONNX.Caffe.TensorFlow,其他常见model建议先转化成ONNX.总结如下: 1 ONNX(.onnx) 2 ...
- 谷歌应用商店chrome扩展程序和APP的发布流程
互联网上有很多大牛,他们再工作中需要一些难题,再找到解决办法后,如果会使用js的话,大多数人就可以自己动手写一个chrome插件,而且非常容易.开发人员都喜欢与大家分享自己的成就!google是一个全 ...
- jQuery学习之------html()、text()和val()
jQuery学习之------html().text()和val() .html(),.text()和.val()的差异总结: (来源:慕课网) .html(),.text(),.val()三种方法 ...
- android源码mm时的编译错误no ruler to make target `out/target/common/obj/JAVA_LIBRARIES/xxxx/javalib.jar', needed by `out/target/common/obj/APPS/xxxx_intermediates/classes-full-debug.jar'. Stop.
瞧见没有,就因为多了这一个反斜杠,浪费了一下午时间找问题,哭了~~~~
- [NOIP2006] 提高组 洛谷P1066 2^k进制数
题目描述 设r是个2^k 进制数,并满足以下条件: (1)r至少是个2位的2^k 进制数. (2)作为2^k 进制数,除最后一位外,r的每一位严格小于它右边相邻的那一位. (3)将r转换为2进制数q后 ...
- 【IntelliJ】IDEA使用--字体、编码和基本设置
IDEA这么高端的工具之前只是断断续续使用了一下,因为项目的开发都是在eclipse上,每次学习IDEA的使用都得上网搜索半天,今天自己整理一下,方便以后查阅. IDEA版本15.0.4 字体 界面字 ...
- POJ 2828 Buy Tickets (线段树 || 树状数组)
题目大意 一些小朋友在排队,每次来一个人,第i个人会插到第x个人的后面.权值为y.保证x∈[0,i-1]. 按照最后的队伍顺序,依次输出每个人的权值. 解题分析 好气吖.本来是在做splay练习,然后 ...
- UVA 129_ Krypton Factor
题意: 一个字符串含有两个相邻的重复的子串,则称这个串为容易的串,其他为困难的串,对于给定n,l,求出由前l个字符组成的字典序第n小的困难的串. 分析: 按字典序在字符串末尾增加新的字符,并从当前字符 ...
- P1165 日志分析 洛谷
https://www.luogu.org/problem/show?pid=1165 题目描述 M 海运公司最近要对旗下仓库的货物进出情况进行统计.目前他们所拥有的唯一记录就是一个记录集装箱进出情况 ...