如何利用jfreechart生成柱状,饼状,折线形图形。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何利用jfreechart生成柱状,饼状,折线形图形。相关的知识,希望对你有一定的参考价值。
用jfreechart生成各种图形报表
随便几句话是说不清的。推荐你看风中叶的struts2视频(到电驴上面搜下),大概到第二十几讲是关于jfreechart的。不过我做他的实验时有乱码,下面附上jfreechart的流程和乱码解决方案。创建一个数据源(dataset)来包含将要在图形中显示的数据
>>创建一个 JFreeChart 对象来代表要显示的图形
>>把图形输出
重要的类和接口:
org.jfree.data.general.Dataset 所有数据源类都要实现的接口
org.jfree.chart.ChartFactory 由它来产生 JFreeChart 对象
org.jfree.chart.JFreeChart 所有对图形的调整都是通过它噢!!
org.jfree.chart.plot.Plot 通过JFreeChart 对象获得它,然后再通过它对图形外部部分(例:坐标轴)调整
注意:它有很多子类,一般都下嗍造型到它的子类!
org.jfree.chart.renderer.AbstractRenderer 通过JFreeChart 对象获得它,然后再通过它对图形内部部分
(例:折线的类型)调整。同样,针对不同类型的报表图,它有
着不同的子类实现!
jfreechart中文乱码问题解决方案(转)
柱状图(CategoryPlot):
CategoryPlot plot=chart.getCategoryPlot();//获取图表区域对象
CategoryAxis domainAxis=plot.getDomainAxis();
//水平底部列表
domainAxis.setLabelFont(new Font("黑体",Font.BOLD,14));
//水平底部标题
domainAxis.setTickLabelFont(new Font("宋体",Font.BOLD,12));
//垂直标题
ValueAxis rangeAxis=plot.getRangeAxis();//获取柱状
rangeAxis.setLabelFont(new Font("黑体",Font.BOLD,15));
chart.getLegend().setItemFont(new Font("黑体", Font.BOLD, 15));
饼图(PiePlot):
JFreeChart chart = ChartFactory.createPieChart3D("IT行业职业分布图", dataset, true, false, false);
chart.getTitle().setFont(new Font("黑体",Font.BOLD,20));//设置标题字体
PiePlot piePlot= (PiePlot) chart.getPlot();//获取图表区域对象
piePlot.setLabelFont(new Font("黑体",Font.BOLD,10));
chart.getLegend().setItemFont(new Font("黑体",Font.BOLD,10));
时序图(TimeSeries)
XYPlot plot = (XYPlot) chart.getPlot();
//纵轴字体
plot.getRangeAxis().setLabelFont(new Font("宋体", Font.BOLD, 15));
//横轴框里的标题字体
chart.getLegend().setItemFont(new Font("宋体", Font.ITALIC, 15));
//横轴列表字体
plot.getDomainAxis().setTickLabelFont(new Font("新宋体", 1, 15));
//横轴小标题字体
plot.getDomainAxis().setLabelFont(new Font("新宋体", 1, 12));
折线图
chart.getTitle().setFont(new Font("宋体", Font.BOLD, 15));
chart.getLegend().setItemFont(new Font("黑体", Font.BOLD, 15));
CategoryAxis domainAxis = plot.getDomainAxis();
/*------设置X轴坐标上的文字-----------*/
domainAxis.setTickLabelFont(new Font("黑体", Font.PLAIN, 11));
/*------设置X轴的标题文字------------*/
domainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 12));
NumberAxis numberaxis = (NumberAxis) plot.getRangeAxis();
/*------设置Y轴坐标上的文字-----------*/
numberaxis.setTickLabelFont(new Font("黑体", Font.PLAIN, 12));
/*------设置Y轴的标题文字------------*/
numberaxis.setLabelFont(new Font("黑体", Font.PLAIN, 12))
参考资料:网络
参考技术A 主要的参数的设置,建议多看看jfreechart的API 参考技术B 我的博客上有jfreechart的各种报表的实例:http://hi.baidu.com/hemes1314
直接将上边的html文件考下来就能看见效果,没连数据库。
Java画折线图
??? JFreeChart 是开放源代码站点SourceForge.net 上的一个 JAVA 项目,它主要用来各种各样的图表,这些图表包括:饼图、柱状图 ( 普通柱状图以及堆栈柱状图 )、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。
??? 应用jfreechart来画图需要两个jar包:jfreechart.jar和jcommon.jar,直接去官网下载就成:
https://sourceforge.net/projects/jfreechart/files/
?? 下载完成后解压,然后将jfreechart.jar和jcommon.jar两个包导入到需要画表的项目中,导入的方法:
右击项目所在的包,选中Build Path,然后选择? Configure?Build Path,点击Libraries,再点击Add External JARS,将上述两个包添加进去就可以用啦
最近在写排序算法,忽然想对比一下各种排序算法的实际运行时间,所以画个图表可以更加直观的进行比较。
代码实现画折线图
class?chart{? ????????//?步骤1:创建CategoryDataset对象(准备数据)? ????CategoryDataset?dataset?=?createDataset();?? ????CategoryDataset?dataset1?=?createDataset1(); ????//?步骤2:根据Dataset?生成JFreeChart对象,以及做相应的设置?? ????JFreeChart?freeChart?=?createChart(dataset);? ????JFreeChart?freeChart1?=?createChart1(dataset1);? ???? ???? ????//根据CategoryDataset创建JFreeChart对象 ????public?static?JFreeChart?createChart(CategoryDataset?categoryDateset){ ???????? ????????//?创建JFreeChart对象:ChartFactory.createLineChart?? ????????JFreeChart?jfreechart?=?ChartFactory.createLineChart("The?Confrontation?Of?Sorts?In?Best?Case",?//?标题 ????????????????"Sort?By",?????????//categoryAxisLabel?(category轴,横轴,X轴标签) ????????????????"Spent?Time",??????//?valueAxisLabel(value轴,纵轴,Y轴的标签) ????????????????categoryDateset,??//Dataset?? ????????????????PlotOrientation.VERTICAL,?false,?//?legend? ????????????????false,??????????//Tooltips ????????????????false);????????//URLs ???????? ????????//?使用CategoryPlot设置各种参数。?? ????????CategoryPlot?plot?=?(CategoryPlot)jfreechart.getPlot();?? ???????? ????????//?背景色?透明度?? ????????plot.setBackgroundAlpha(0.5f);?? ???????? ????????//?前景色?透明度?? ????????plot.setForegroundAlpha(1.0f);?? ???????? ????????//?其他设置?参考?CategoryPlot类?? ????????LineAndShapeRenderer?renderer?=?(LineAndShapeRenderer)plot.getRenderer();?? ????????renderer.setBaseShapesVisible(true);?//?series?点(即数据点)可见?? ????????renderer.setBaseLinesVisible(true);?//?series?点(即数据点)间有连线可见?? ????????renderer.setUseSeriesOffset(true);?//?设置偏移量?? ????????renderer.setBaseItemLabelGenerator(new?StandardCategoryItemLabelGenerator());?? ????????renderer.setBaseItemLabelsVisible(true);?? ????????return?jfreechart;?? ????} ???? ????public?static?CategoryDataset?createDataset()?{?? ????????String[]?rowKeys?=?{"Sort"};?? ????????String[]?colKeys?=?{"HeapSort","ShellSort","BubbleSort","QuickSort","RadixSort","SimpleSort"};?? ???????? ????????double[][]?data?=?{{TimeChat.btime_Heap,TimeChat.btime_Shell,TimeChat.btime_Bubble,TimeChat.btime_Quick,TimeChat.btime_Radix,TimeChat.btime_Simple},};??? ????????//System.out.println(TimeChat.btime_Heap); ????????return?DatasetUtilities.createCategoryDataset(rowKeys,?colKeys,?data);?? ????} ???? ????//最坏情况下 ?????public?static?JFreeChart?createChart1(CategoryDataset?categoryDateset){ ???????? ????????//?创建JFreeChart对象:ChartFactory.createLineChart?? ????????JFreeChart?jfreechart?=?ChartFactory.createLineChart("The?Confrontation?Of?Sorts?In?Worst?Case",?//?标题 ????????????????"Sort?By",???????????//categoryAxisLabel?(category轴,横轴,X轴标签)? ????????????????"Spent?Time",???????//valueAxisLabel(value轴,纵轴,Y轴的标签) ????????????????categoryDateset,????//?Dataset ????????????????PlotOrientation.VERTICAL,?false,?//?legend? ????????????????false,????????????//Tooltips? ????????????????false);??????????//?URLs? ???????? ? ????????CategoryPlot?plot?=?(CategoryPlot)jfreechart.getPlot();? ????????plot.setBackgroundAlpha(0.5f);??? ????????plot.setForegroundAlpha(0.5f); ????????LineAndShapeRenderer?renderer?=?(LineAndShapeRenderer)plot.getRenderer();? ????????renderer.setBaseShapesVisible(true);?//?series?点(即数据点)可见? ????????renderer.setBaseLinesVisible(true);?//?series?点(即数据点)间有连线可见? ????????renderer.setUseSeriesOffset(true);?//?设置偏移量? ????????renderer.setBaseItemLabelGenerator(new?StandardCategoryItemLabelGenerator());? ????????renderer.setBaseItemLabelsVisible(true);? ????????return?jfreechart;? ?????} ????? ?????public?static?CategoryDataset?createDataset1()?{? ????????String[]?rowKeys?=?{"Sort"};? ????????String[]?colKeys?=?{"HeapSort","ShellSort","BubbleSort","QuickSort","RadixSort","SimpleSort"};? ??????? ????????double[][]?data?=?{{TimeChat.wtime_Heap,TimeChat.wtime_Shell,TimeChat.wtime_Bubble,TimeChat.wtime_Quick,TimeChat.wtime_Radix,TimeChat.wtime_Simple},};?? ????????//System.out.println(TimeChat.btime_Heap); ????????return?DatasetUtilities.createCategoryDataset(rowKeys,?colKeys,?data);? ????} ????? }
将图表建好之后需要借助ChartPanel类将其显示出来,或者可以将生成的图表以图片格式保存到本地,我选择将它直接显示出来:
public?class?TimeChart{ ?????public?static?void?main(String[]?strings){ ??????????TimeChat?tc?=?new?TimeChat();?//另一个类,初始化data[][]中的变量 ??????????chart?ct?=?new?chart(); ??????????ChartPanel?chartf?=?new?ChartPanel(ct.freeChart,true); ??????????ChartPanel?chartf1?=?new?ChartPanel(ct.freeChart1,true); ??????????JFrame?jf?=?new?JFrame(); ??????????jf.add(chartf,BorderLayout.WEST); ??????????jf.add(chartf1,BorderLayout.EAST); ??????????jf.setVisible(true); ??????????jf.setSize(1400,?600); ??????????jf.setLocationRelativeTo(null); ?????} }
运行效果如下
以上是关于如何利用jfreechart生成柱状,饼状,折线形图形。的主要内容,如果未能解决你的问题,请参考以下文章