利用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. git命令初级

    git是开源的分布式版本控制系统,分布式主要区别于集中式代表CVS(Concurrent Version System,遵从C/S架构,同步比较笨拙.)和SVN(Subversion),linux开发 ...

  2. 性能测试培训day1

    测试本质: 1构造测试数据和期望结果 2执行 3验证 自动化测试: 写完代码,单元测试测代码逻辑,单元测试搞清楚代码逻辑就行了(白盒测试)先静态,运行前用工具扫描BUG例如(a==11写成a=11), ...

  3. 树莓派2-SSH

    树莓派3系统SSH是默认关闭的, 将SD卡插入linux, 在root 分区, 修改/etc/rc.local 在exit 0前增加一行 /ect/init.d/ssh start 将SD卡插回树莓派 ...

  4. ECNU 3263 丽娃河的狼人传说 (贪心)

    链接:http://acm.ecnu.edu.cn/problem/3263/ 题意: 从 1 到 n 的一条数轴.有 m 个区间至少要安装一定数量的路灯,路灯只能装在整数点上,有k盏路灯已经安装好  ...

  5. vscode调试nodejs

    1.安装nodejs 2.安装vscode 3.vscode安装debugger for chrome插件 4.新建nodejs-test文件夹,新建server.js空白文件,添加内容: var h ...

  6. git clone问题

    中秋节回来上班 竟然忘记带电脑了  ̄□ ̄||还好同事有备用电脑,这要是回去拿估计上午都不用干什么了,用同事电脑当然需要安装环境,下面说一下git上遇到的问题吧 (1)首先我尝试用https方式克隆代码 ...

  7. MBP 2018 & Mac keyboard shortcuts

    MBP 2018 & Mac keyboard shortcuts https://support.apple.com/en-us/HT201236 delete key === Contro ...

  8. 592. Fraction Addition and Subtraction

    Problem statement: Given a string representing an expression of fraction addition and subtraction, y ...

  9. Codeforces713D. Animals and Puzzle

    $n<=1000,m<=1000$,$n*m$的01矩阵,给$t<=1000000$个询问,每次问一个矩形中最大的1正方形的边长. 先想想不考虑“一个矩形中”的限制,那记$f(i,j ...

  10. HashSet源码分析2

    package com.test1; import java.util.HashSet; import java.util.Iterator; import java.util.Set; public ...