利用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. 小甲鱼python疑难点

    1.python生成器 2.while 1: num = input('请输入一个整数(输入Q结束程序):') if num != 'Q': num = int(num) print('十进制 -&g ...

  2. Python 函数对象-函数嵌套-名称空间与作用域-闭包函数

    今日内容: 1. 函数对象 函数是第一类对象: 指的是函数名指向的值可以被当中数据去使用 1.可以被引用 2.可以当做参数传给另一个函数 3.可以当做一个函数的返回值 4.可以当做容器类型的元素 2. ...

  3. Matlab学习笔记(二)

    二.MATLAB基础知识 (二)数值.变量和表达式 命名规则: 变量名对大小写敏感,即区分大小写 变量名必须以字母开头,后面可以采用数字.下划线和字母,但不能使用空格.标点符号和运算符 变量名最长可以 ...

  4. Rightmost Digit (求n^n最后一位)

    Description Given a positive integer N, you should output the most right digit of N^N.    Input The ...

  5. 集训第六周 数学概念与方法 UVA 11181 条件概率

    http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=18546 题意:有n个人会去超市,其中只有r个人会买东西,每个人独自买东西的概 ...

  6. NOI模拟(3.3)螺旋序列(出题人一定是月厨)

    Description S也想寻求真正的智慧,然而由于“抑制力”的存在,她必须先解决一系列询问.有一个长度为n的序列a,一个长度为m序列b被称为螺旋序列当且仅当b1=bm且对于1<=i<= ...

  7. Qt项目——数字内容管理系统的参考资料和细节

    打开文件路径,若带空格,要用引号括起路径 LPCWSTR与QString的转换:LPCWSTR strL = strQ.toStdWString().c_str(); 用指定程序打开文件(选择文件的打 ...

  8. Android BottomSheet:底部弹出Fragment面板(4)

     Android BottomSheet:底部弹出Fragment面板(4) BottomSheet不仅可以弹出轻量级的定制好的面板(见附录文章5,6,7),还可以弹出"重"的 ...

  9. 讨论几种数据列Column的特性(上)

    之前笔者写过一个系列<索引列的usable和visible>(http://space.itpub.net/17203031/viewspace-688135),详细讨论了索引列的usab ...

  10. python 安装依赖几个问题---HttpScan

    https://blog.csdn.net/chenggong2dm/article/details/61923420 https://www.cnblogs.com/caochuangui/p/59 ...