利用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. 笔试算法题(14):整数二进制表示中的1 & 判定栈的push和pop序列是否对应

    出题:输入一个整数,要求计算此整数的二进制表示中1的个数 分析: 如果整数表示为k,当其是负数的时候,使用1<<i分别检测k的每一位:当其位整数的时候,则k/2表示将其二进制表示右移一位, ...

  2. sphinx配置

    配置文件 ## 数据源src1 source src1 { ## 说明数据源的类型.数据源的类型可以是:mysql,pgsql,mssql,xmlpipe,odbc,python ## 有人会奇怪,p ...

  3. mysql 存储过程批量删除重复数据

    表结构: LOAD DATA INFILE '/usr/local/phone_imsi_12' replace INTO TABLE tbl_imsi2number_new FIELDS TERMI ...

  4. zabbix源码安装后,设置为服务启动和关闭

    zabbix源码安装,使用service启动与关闭服务 1. zabbix客户端的系统服务脚本 1.1 拷贝启动脚本 zabbix的源码提供了系统服务脚本,在/usr/local/src/zabbix ...

  5. 关于Python构建微服务的思考(一)

    一:什么是微服务? 微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成. 系统中的各个微服务可被独立部署,各个微服务之间是松耦合的. 每个微服务仅关注于完成一件任务并很好地完成该任务. ...

  6. 基于html实现一个todolist待办事项

    index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...

  7. BNUOJ 2105 Distance Queries

    Distance Queries Time Limit: 2000ms Memory Limit: 30000KB This problem will be judged on PKU. Origin ...

  8. 视图 v$sql,v$sqlarea,$sqltext,v$sqltext_with_newlines 的差异

    http://blog.csdn.net/leshami/article/details/8658205 视图v$sql,v$sqlarea,v$sqltext,v$sqltext_with_newl ...

  9. [BZOJ3196] [Tyvj1730] 二逼平衡树(线段树 套 Splay)

    传送门 至少BZOJ过了,其他的直接弃. 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作: 1.查询k在区间内的排名 2.查询区间内排名为k的值 3.修改某一位值上的 ...

  10. windows PHP配置随笔

    这几天配置本地windows wnmp(windows + nginx + mysql + php 5.3)遇到了不少问题.决定以后随笔记下解决的问题. #php.ini 配置含路径的值时,要注意把使 ...