JFreeChart生成各种统计图

来源:互联网 发布:curl 发送json数据 编辑:程序博客网 时间:2024/05/01 00:24

JFreeChart是一个开源的JAVA项目,它主要用来开发各种各样的图表,这些图表包括:饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。在这些不同式样的图表上可以满足目前商业系统的要求。JFreeChart是一种基于JAVA语言的图表开发技术。JFreeChart可用于Servlet、JSP、Applet、Java Appication环境中,通过JDBC可动态显示任何数据库数据,结合Itext可以输出至PDF文件。JFreeChart主要是由三个类构成:

A)org.jfree.chart.servlet.ChartDeleter继承自HttpSessionBindingListener,用于实现当Session关闭时,删除临时目中的图象文件。

B)org.jfree.chart.servlet.DisplayChart继承自Httpservlet用于处理显示图
象。

C)org.jfree.chart.servlet.ServletUtilities有一系列方法,例如,saveChartAs*;saveChartAs*是把图表按照不同的形式存储为图象;sendTempFile方法被重载了很多次,用于把文件流发送response。下面以柱状图和饼图为例,介绍图形创建方法。
1 柱状图org.jfree.chart.ChartFactory这个工厂类有createBarChart、createStackedBarChart、createBarChart3D、createStackedBarChart3D,这几个工厂方法创建不同类型的柱状图,比较重要的是PlotOrientation.VERTICAL让平行柱垂直显示,而PlotOrientation.HORIZONTAL则让平行柱水平显示。对柱状图影响较大的几个类包括:org.jfree.chart.axis.CategoryAxis、org.jfree.chart.axis.ValueAxis、org.jfree.chart.renderer.BarRenderer、org.jfree.chart.renderer. BarRenderer3D。

具体实现步骤:

1)创建用于图形生成所要的数据集对象。
CategoryDataset dataset = DatasetUtilities.createCategoryDataset(rowKeys, columnKeys, data);
其中:rowKeys表示X轴数据,columnKeys表示Y轴数据,data表示填充柱状图所要的实际数据(来自于数据库)。
2)创建图形对象。JFreeChart chart = ChartFactory.createBarChart3D("标题", null,null,dataset,
PlotOrientation.VERTICAL,,true,false,false); createBarChart3D方法是ChartFactory工厂类里的一个方法,
用于3D柱状图的生成,该类继承自JFreeChart。其中的八个参数分别代表:图形的标题、X轴标题、Y轴标
题、dataset就是CategoryDataset类的实例对象、显示标题、启用热键、启用超键接。

3)设置图形显示的属性。
a ) ValueAxis类,设置柱到图上下边的距离。实现方法是:ValueAxis rangeAxis = plot.getRangeAxis();
设置最高的一个柱与图片顶端的距离:rangeAxis.setUpperMargin(0.15)设置最低的一个柱与图片底端
的距离:rangeAxis.setLowerMargin(0.15)b)org.jfree.chart.renderer.BarRenderer3D类,
设置图形上显示的数值。实现方法如下:BarRenderer3D renderer = new BarRenderer3D();
renderer.setBaseOutlinePaint(Color.BLACK);设置Wall的颜色:renderer.setWallPaint(Color.gray);
设置每个柱的颜色:renderer.setSeriesPaint(0, new Color(0, 0, 255));
renderer.setSeriesPaint(1, new Color(0, 100, 255));renderer.setSeriesPaint(2, Color.GREEN);
设置每个柱的Outline颜色renderer.setSeriesOutlinePaint(0, Color.BLACK);
renderer.setSeriesOutlinePaint(1, Color.BLACK);renderer.setSeriesOutlinePaint(2, Color.BLACK);
设置每个地区所包含的平行柱之间的距离renderer.setItemMargin(0.1);显示每个柱的数值,
并修改该数值的字体属性renderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());
renderer.setItemLabelFont(new Font("黑体",Font.PLAIN,12));renderer.setItemLabelsVisible(true);
为图形加入超连接renderer.setItemURLGenerator(new StandardCategoryURLGenerator());
renderer.setToolTipGenerator(new StandardCategoryToolTipGenerator());
2 饼图org.jfree.chart.plot包,包含创建饼形图的所有方法和属性。笔者根据业务需求创建了
setURLGenerator(PieURLGenerator generator)方法,在图片上建立连接,就是图片不同部分连接不同的资源。
setSectionLabelType(int type)方法:指定section标签的类型,共有7种类型。如果不指定,默认是NAME_LABELS,
其中类型分别是:
PiePlot.NO_LABELSPiePlot.NAME_LABELSPiePlot.VALUE_LABELSPiePlot.PERCENT_LABELS、
PiePlot.NAME_AND_VALUE_LABELS、PiePlot. NAME_AND_PERCENT_LABELS、PiePlot.VALUE_AND_PERCENT_LABELS。
setDefaultOutlinePaint(java.awt.Paint paint)方法,指定section轮廓线的颜色,如果不指定,
默认值为NULL。setDefaultOutlineStroke(java.awt.Stroke stroke)方法,指定section轮廓线的厚度。
setRadius(double percent)和setExplodePercent(int section, double percent)方法,抽离section,
就是把某一section从饼形图剥离出来,需要两个方法一起使用。setStartAngle(double angle)方法,
设置第一个section开始位置,默认从12点钟方向开始。setPaint(int section, java.awt.Paint paint)
方法指定section的颜色。setDirection(int direction)方法指定section顺序,默认是顺时针方向。
顺时针:PiePlot.CLOCKWISE;逆时针:PiePlot.ANTICLOCKWISE。
具体实现步骤:
1)创建用于图形生成所要的数据集对象。首先实例化类DefaultPieDataset dataset = new DefaultPieDataset()。
然后利用DefaultPieDataset类提供的setValue(value1,value2)方法,
把从数据库里提取的数据存入DefaultPieDataset对象。其中value1是数据名称、value2是数据值。
2)创建图形对象。
首先实例化JFreeChart chart = ChartFactory.createPieChart3D(title, dataset, true, true, false)
createPieChart3D方法是用于饼图生成的主要方法。
其中title代表图形的标题、dataset就是DefaultPieDataset对象的实例。
3)设置图形显示的属性。String filename = ServletUtilities.saveChartAsPNG(jFreeChart, 700, 450, info, session);
ChartUtilities.writeImageMap(pw, filename, info);pw.flush()saveChartAsPNG方法在ServletUtilities工厂类定义完成。
主要用于把图形对象JFreeC以图片的形式保存。其中的jFreeChart就是JFreeChart对象的实例。
该方法返回一个文件名。writeImageMap(pw, filename, info)方法用于把保存的图片文件以字节流的形式写入用户界面。
其中pw是java.io包的PrintWriter类的实例对象,该对象创建一个图形输出流。Filename是输出图片的文件名。
该文件名来自ServletUtilities.saveChartAsPNG方法创建。参数info用于图形信息的显示。
用ChartRenderingInfo info=new ChartRenderingInfo(new StandardEntityCollection())创建。
最后输出完成图形,调用pw.flush()方法关闭IO流。

JFreeChart是一个开源的JAVA项目,它主要用来开发各种各样的图表,
这些图表包括:饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。
在这些不同式样的图表上可以满足目前商业系统的要求。JFreeChart是一种基于JAVA语言的图表开发技术。
JFreeChart可用于Servlet、JSP、Applet、Java Appication环境中,通过JDBC可动态显示任何数据库数据,
结合Itext可以输出至PDF文件。

JFreeChart主要是由三个类构成:

A)org.jfree.chart.servlet.ChartDeleter继承自HttpSessionBindingListener,用于实现当Session关闭时,
删除临时目中的图象文件。

B)org.jfree.chart.servlet.DisplayChart继承自Httpservlet用于处理显示图象。

C)org.jfree.chart.servlet.ServletUtilities有一系列方法,
例如,saveChartAs*;saveChartAs*是把图表按照不同的形式存储为图象;sendTempFile方法被重载了很多次,
用于把文件流发送response。

下面以柱状图和饼图为例,介绍图形创建方法。

1 柱状图

org.jfree.chart.ChartFactory这个工厂类有createBarChart、createStackedBarChart、
createBarChart3D、createStackedBarChart3D,这几个工厂方法创建不同类型的柱状图,
比较重要的是PlotOrientation.VERTICAL让平行柱垂直显示,而PlotOrientation.HORIZONTAL则让平行柱水平显示。
对柱状图影响较大的几个类包括:org.jfree.chart.axis.CategoryAxis、org.jfree.chart.axis.ValueAxis、
org.jfree.chart.renderer.BarRenderer、org.jfree.chart.renderer. BarRenderer3D。

具体实现步骤:

1)创建用于图形生成所要的数据集对象。

CategoryDataset dataset = DatasetUtilities.createCategoryDataset(rowKeys, columnKeys, data);

其中:rowKeys表示X轴数据,columnKeys表示Y轴数据,data表示填充柱状图所要的实际数据(来自于数据库)。

2)创建图形对象。

JFreeChart chart = ChartFactory.createBarChart3D("标题", null,null,dataset,
PlotOrientation.VERTICAL,,true,false,false);


createBarChart3D方法是ChartFactory工厂类里的一个方法,用于3D柱状图的生成,该类继承自JFreeChart。
其中的八个参数分别代表:图形的标题、X轴标题、Y轴标题、dataset就是CategoryDataset类的实例对象、
显示标题、启用热键、启用超键接。

3)设置图形显示的属性。

a ) ValueAxis类,设置柱到图上下边的距离。实现方法是:

ValueAxis rangeAxis = plot.getRangeAxis();

设置最高的一个柱与图片顶端的距离:

rangeAxis.setUpperMargin(0.15)

设置最低的一个柱与图片底端的距离:

rangeAxis.setLowerMargin(0.15)

b)org.jfree.chart.renderer.BarRenderer3D类,设置图形上显示的数值。实现方法如下:

BarRenderer3D renderer = new BarRenderer3D();

renderer.setBaseOutlinePaint(Color.BLACK);

设置Wall的颜色:

renderer.setWallPaint(Color.gray);

设置每个柱的颜色:

renderer.setSeriesPaint(0, new Color(0, 0, 255));

renderer.setSeriesPaint(1, new Color(0, 100, 255));

renderer.setSeriesPaint(2, Color.GREEN);

设置每个柱的Outline颜色
renderer.setSeriesOutlinePaint(0, Color.BLACK);

renderer.setSeriesOutlinePaint(1, Color.BLACK);

renderer.setSeriesOutlinePaint(2, Color.BLACK);

设置每个地区所包含的平行柱之间的距离
renderer.setItemMargin(0.1);

显示每个柱的数值,并修改该数值的字体属性

renderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());

renderer.setItemLabelFont(new Font("黑体",Font.PLAIN,12));

renderer.setItemLabelsVisible(true);

为图形加入超连接

renderer.setItemURLGenerator(new StandardCategoryURLGenerator());

renderer.setToolTipGenerator(new StandardCategoryToolTipGenerator());

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 杂粮 杂粮有哪些 杂粮馒头 杂粮米饭 杂粮米糊 杂粮粘贴画 杂粮粥配方 杂粮粥功效 杂粮窝窝头 五谷杂粮画 杂粮粥做法 五谷杂粮汁 杂粮面包 杂粮粉 杂粮包 杂粮辽参 杂粮豆浆 南瓜杂粮饭 杂粮图片 杂粮饼 杂粮包装机 什么是杂粮 小杂粮 杂粮价格 杂粮大全 杂粮店 杂粮包子 杂粮吐司 杂粮煎饼面糊配方 杂粮手工粘贴画 杂粮煎饼热量 山东杂粮窝窝头 杂粮饭的做法 减肥瘦身杂粮饭 杂粮煎饼做法 杂粮煎饼面糊放什么才酥脆 10种常见杂粮名称及图片 十四种杂粮粥配方 五谷杂粮搭配表 杂粮饭怎么搭配 杂粮粥的做法