jfreechart功能十分强大了,在我们平台中用到了柱图和曲线图,下面我就来讲讲这两种图,先讲曲线图,由于客户要看到每日的分钟走势图,所以就像股票的分时一样,我们要把每一天中每一分钟内的在线用户及访问量还有它们分别出现的峰值标示出来.由于是分钟走势啊,所以我们就用到了jfreechart中的TimeSeries,首先要用它来创建dataset,如果对jfreechart不了解的用户,自行去看guide手册,画图要分三步来进行,一,创建dataset,二,创建chart,三,生成图片
我们这里直接在数据库中把我们上文中生成的数据,取出来放到TimeSeries中,然后我们用jfreechart的工厂生成我们想要的曲线图,
TradeLogServiceImpl tradeService = (TradeLogServiceImpl) ctx.getBean("testtrade");
// user online
Map<Integer, Date> userPeak = new HashMap<Integer, Date>();
List<TradeUserOnline> list = tradeService.getUserOnline(start);
if (list.size() != 0) {
TimeSeries s1 = new TimeSeries("分钟在线用户", Minute.class);
for (int i = 0; i < list.size(); i++) {
TradeUserOnline userOnline = (TradeUserOnline) list.get(i);
s1.addOrUpdate(/*add(*/new Minute(userOnline.getOnlinetime()), userOnline.getOnlinecount());
userPeak.put(userOnline.getOnlinecount(), userOnline.getOnlinetime());
}
Object[] objs = userPeak.keySet().toArray();
java.util.Arrays.sort(objs);
userPeakValue = (Integer) objs[objs.length - 1];
userTime = userPeak.get(userPeakValue);
dataset.addSeries(s1);
} else {
logger.error(start+" 没有交易在线用户数据");
}
logger.info(start+" userPeakValue=" + userPeakValue);
logger.info(start+" userTime=" + userTime);
JFreeChart chart = ChartFactory.createTimeSeriesChart(start + " 每分钟在线用户走势图", // 图表标题
"时间", // 目录轴的显示标签
"用户数", // 数值轴的显示标签
dataset, // 数据集
true, // 是否显示图例()
false, // 是否生成工具
false // 是否生成URL链接
);
上面我们就生成了分钟在线用户的dataset,然后生成分钟在线用户的时间序列.peakvalue是峰值,peaktime是峰值出现的时间.我们下面会用这两个去做注释.
if (userPeakValue != null && accessPeakValue != null && accessTime != null && userTime != null) {
Font font = new Font("SansSerif", Font.BOLD, 12);
// 添加在线用户注释
XYTextAnnotation userAnn = new XYTextAnnotation(userPeakValue + " 峰值时间:\n\r" + format(userTime), userTime.getTime(), userPeakValue);
userAnn.setFont(font);
userAnn.setTextAnchor(TextAnchor.HALF_ASCENT_LEFT);
plot.addAnnotation(userAnn);
注意上面XYTextAnnotation 的构造方法,jfreechartAPI里后面两个参数是double,double,这里我们将时间系列的时间转化为long型的秒来用作domain axis,int型的值做为峰值,其实都是强制转化为double.这里一定要注意domain axis,我一开始陷入误区,以为timeseries的无法实现注释呢,后来经架构师一点拔,才悟出来的.:=(
生成图片的时候,我们可以将domain axis的日期格式化一下,
DateAxis axis = (DateAxis) plot.getDomainAxis();
axis.setDateFormatOverride(new SimpleDateFormat("yyyy-MM-dd HH:mm"));
生成jfreechart图的最后一步是: 将chart用流输出到jsp页面上展示啊
用到jfreechart的类
//流的目的地,chart,及图片的宽和高
ChartUtilities.writeChartAsPNG(response.getOutputStream(), chart, width, height);
好了,时间系列图就完成了.下面我们来说下柱图
柱图用CategoryDataset来保存数据集合,一般用
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
for (int i = 0; i < list.size(); i++) {
TradelogsCommon log = (TradelogsCommon) list.get(i);
String y = log.getOperatingresults();
if (y.equals("Y")) {
y = "成功";
} else if (y.equals("N")) {
y = "失败";
}
dataset.setValue(log.getOperatenumbers(), y, log
.getSalesdepcodename().getSalesdepname());
}
数据集合生成了然后再用chart工厂来生成柱图
JFreeChart chart = ChartFactory.createBarChart3D(start
+ " 按时间点 " + opt + "操作 访问量统计图", // 图表标题
"XXXX", // 目录轴的显示标签
"访问量", // 数值轴的显示标签
dataset, // 数据集
PlotOrientation.VERTICAL, // 图表方向:水平、垂直
true, // 是否显示图例(对于简单的柱状图必须是false)
false, // 是否生成工具
false // 是否生成URL链接
);
.............
ChartUtilities.writeChartAsPNG(response.getOutputStream(), chart,
width, height);
最后还是用流将chart传输到页面上去生成图片.
分享到:
相关推荐
<TITLE>JFreeChart 简单的例子 <H2>JFreeChart: 简单的例子 下面有两个简单的例子,调用servlet,生成统计图. 条形统计图 href="servlet/ServletDemo1">条形统计图; <!--跳转到ServletDemo1生成条形统计图--> 可以...
利用JFreeChart+JSP+Servlet的方式,连接数据库,实现了对后台统数据的展示,这里数据库用的是SQL server 2005.
jfreechart 生成统计报表 0.9
JFreeChart+让横轴的标题竖着显示:因为横轴的坐标刻度太密集了,所以显示的时间连在一起看不清,如何让它纵向显示(竖着显示下来)
POI和JFreeChart框架实现生成Excel文件(生成 统计图)
jfreechart-1.5.2.jar,jfreechart|jfreechart
NULL 博文链接:https://chaoyi.iteye.com/blog/2173710
JFreeChart 指南 JFreeChart Guide JFreeChart 示例 JFreeChart demo
JFreeChart画统计分析柱状图的很好的例子,帮助你更快掌握jfreechart的用法。
jfreechart生成各种图表 柱状 饼状 折线 锥状
Jfreechart 乱码分析和解决方法
jfreechart Java图形报表开源代码
JfreeChart 3D 绘图 柱状图,线形图 3D
jfreechart生成统计图完整的例子。带jar包和说明。如何解决缓存问题说明。
JFreeChart 让X轴的标题竖着显示。 比如x轴的 "苹果 香蕉 橘子"就变成了: 苹 香 橘 果 蕉 子
此解压包中包括JFreeChart中文教程(入门篇)和 JFreeChart重点API英文对照
JfreeChart学习总结JfreeChart学习总结
jfreeChart 直线 生成web图片显示点数据 点数据带y轴数据 指点显示位置
利用JfreeChart显示柱状图以及改变柱子之间的宽度和大小
S2SH+jfreechart+ajax动态生成统计图