您好,欢迎来到叨叨游戏网。
搜索
您的当前位置:首页freechart实现组合图表

freechart实现组合图表

来源:叨叨游戏网
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轴的组合图表。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- gamedaodao.net 版权所有 湘ICP备2024080961号-6

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务