




已阅读5页,还剩25页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
精选文库java实现各种数据统计图(柱形图,饼图,折线图)分类:Java2012-05-24 22:2822644人阅读评论(29)收藏举报javajfreechartdatasetapplicationclassproperties最近在做数据挖掘的课程设计,需要将数据分析的结果很直观的展现给用户,这就要用到数据统计图,要实现这个功能就需要几个第三方包了:1. jfreechart-1.0.13.jar2. jcommon-1.0.16.jar3. gnujaxp.jar先来看一下,最终效果图:主要是jfreechart-1.0.13.jar,但这三个包要齐全,我已经将所有与jfreechart有关的jar包与本文实例的工程(代码)一同压缩上传了,有兴趣的同学可以下载,下载地址:/detail/pzhtpf/4327700接下来,我们一步步来实现本程序。一,前期准备工作,也就把这三个第三方包添加进本文工程,添加过程特别简单,前面写过一篇博客,讲的是java如何读取Excel表格中的数据(有兴趣的同学可以看一看:/pzhtpf/article/details/7506135),也要添加第三方包,添加过程一模一样,这里我们在复习一遍:1,建,立java项目,在这个项目在建立一个新的文件夹lib;2,将上述三个jar包,复制到lib3,然后右键点击这个java项目,选择Properties4,在左侧列表里选中Java Build Path,右侧选中Libraries5,点击Add JARs6,然后去选择这个项目中lib文件夹中的三个jar,点击确定成功后,项目中会多一个文件夹为:Referenced Libraries二,实现柱形图的java代码:plainview plaincopy1. importjava.awt.Font;2. 3. importorg.jfree.chart.ChartFactory;4. importorg.jfree.chart.ChartPanel;5. importorg.jfree.chart.JFreeChart;6. importorg.jfree.chart.axis.CategoryAxis;7. importorg.jfree.chart.axis.ValueAxis;8. importorg.jfree.chart.plot.CategoryPlot;9. importorg.jfree.chart.plot.PlotOrientation;10. importorg.jfree.data.category.CategoryDataset;11. importorg.jfree.data.category.DefaultCategoryDataset;12. 13. publicclassBarChart14. ChartPanelframe1;15. publicBarChart()16. CategoryDatasetdataset=getDataSet();17. JFreeChartchart=ChartFactory.createBarChart3D(18. 水果,/图表标题19. 水果种类,/目录轴的显示标签20. 数量,/数值轴的显示标签21. dataset,/数据集22. PlotOrientation.VERTICAL,/图表方向:水平、垂直23. true,/是否显示图例(对于简单的柱状图必须是false)24. false,/是否生成工具25. false/是否生成URL链接26. );27. 28. /从这里开始29. CategoryPlotplot=chart.getCategoryPlot();/获取图表区域对象30. CategoryAxisdomainAxis=plot.getDomainAxis();/水平底部列表31. domainAxis.setLabelFont(newFont(黑体,Font.BOLD,14);/水平底部标题32. domainAxis.setTickLabelFont(newFont(宋体,Font.BOLD,12);/垂直标题33. ValueAxisrangeAxis=plot.getRangeAxis();/获取柱状34. rangeAxis.setLabelFont(newFont(黑体,Font.BOLD,15);35. chart.getLegend().setItemFont(newFont(黑体,Font.BOLD,15);36. chart.getTitle().setFont(newFont(宋体,Font.BOLD,20);/设置标题字体37. 38. /到这里结束,虽然代码有点多,但只为一个目的,解决汉字乱码问题39. 40. frame1=newChartPanel(chart,true);/这里也可以用chartFrame,可以直接生成一个独立的Frame41. 42. 43. privatestaticCategoryDatasetgetDataSet()44. DefaultCategoryDatasetdataset=newDefaultCategoryDataset();45. dataset.addValue(100,北京,苹果);46. dataset.addValue(100,上海,苹果);47. dataset.addValue(100,广州,苹果);48. dataset.addValue(200,北京,梨子);49. dataset.addValue(200,上海,梨子);50. dataset.addValue(200,广州,梨子);51. dataset.addValue(300,北京,葡萄);52. dataset.addValue(300,上海,葡萄);53. dataset.addValue(300,广州,葡萄);54. dataset.addValue(400,北京,香蕉);55. dataset.addValue(400,上海,香蕉);56. dataset.addValue(400,广州,香蕉);57. dataset.addValue(500,北京,荔枝);58. dataset.addValue(500,上海,荔枝);59. dataset.addValue(500,广州,荔枝);60. returndataset;61. 62. publicChartPanelgetChartPanel()63. returnframe1;64. 65. 66. 效果图如下:但我们把privatestaticCategoryDataset getDataSet()方法中的数据变化一下后,又会形成另一种效果,比如说我们改成:plainview plaincopy1. privatestaticCategoryDatasetgetDataSet()2. DefaultCategoryDatasetdataset=newDefaultCategoryDataset();3. dataset.addValue(100,苹果,苹果);4. dataset.addValue(200,梨子,梨子);5. dataset.addValue(300,葡萄,葡萄);6. dataset.addValue(400,香蕉,香蕉);7. dataset.addValue(500,荔枝,荔枝);8. returndataset;9. 效果图如下:三,实现饼状图的java代码:plainview plaincopy1. packagecom.njue.testJFreeChart;2. 3. importjava.awt.Font;4. importjava.text.DecimalFormat;5. importjava.text.NumberFormat;6. 7. importjavax.swing.JPanel;8. 9. importorg.jfree.chart.ChartFactory;10. importorg.jfree.chart.ChartPanel;11. importorg.jfree.chart.JFreeChart;12. importorg.jfree.chart.labels.StandardPieSectionLabelGenerator;13. importorg.jfree.chart.plot.PiePlot;14. importorg.jfree.data.general.DefaultPieDataset;15. 16. publicclassPieChart17. ChartPanelframe1;18. publicPieChart()19. DefaultPieDatasetdata=getDataSet();20. JFreeChartchart=ChartFactory.createPieChart3D(水果产量,data,true,false,false);21. /设置百分比22. PiePlotpieplot=(PiePlot)chart.getPlot();23. DecimalFormatdf=newDecimalFormat(0.00%);/获得一个DecimalFormat对象,主要是设置小数问题24. NumberFormatnf=NumberFormat.getNumberInstance();/获得一个NumberFormat对象25. StandardPieSectionLabelGeneratorsp1=newStandardPieSectionLabelGenerator(02,nf,df);/获得StandardPieSectionLabelGenerator对象26. pieplot.setLabelGenerator(sp1);/设置饼图显示百分比27. 28. /没有数据的时候显示的内容29. pieplot.setNoDataMessage(无数据显示);30. pieplot.setCircular(false);31. pieplot.setLabelGap(0.02D);32. 33. pieplot.setIgnoreNullValues(true);/设置不显示空值34. pieplot.setIgnoreZeroValues(true);/设置不显示负值35. frame1=newChartPanel(chart,true);36. chart.getTitle().setFont(newFont(宋体,Font.BOLD,20);/设置标题字体37. PiePlotpiePlot=(PiePlot)chart.getPlot();/获取图表区域对象38. piePlot.setLabelFont(newFont(宋体,Font.BOLD,10);/解决乱码39. chart.getLegend().setItemFont(newFont(黑体,Font.BOLD,10);40. 41. privatestaticDefaultPieDatasetgetDataSet()42. DefaultPieDatasetdataset=newDefaultPieDataset();43. dataset.setValue(苹果,100);44. dataset.setValue(梨子,200);45. dataset.setValue(葡萄,300);46. dataset.setValue(香蕉,400);47. dataset.setValue(荔枝,500);48. returndataset;49. 50. publicChartPanelgetChartPanel()51. returnframe1;52. 53. 54. 效果图如下:四,实现折线图的java代码:plainview plaincopy1. packagecom.njue.testJFreeChart;2. 3. importjava.awt.Font;4. importjava.text.SimpleDateFormat;5. 6. importorg.jfree.chart.ChartFactory;7. importorg.jfree.chart.ChartPanel;8. importorg.jfree.chart.JFreeChart;9. importorg.jfree.chart.axis.DateAxis;10. importorg.jfree.chart.axis.ValueAxis;11. importorg.jfree.chart.plot.XYPlot;12. importorg.jfree.data.time.Month;13. importorg.jfree.data.time.TimeSeries;14. importorg.jfree.data.time.TimeSeriesCollection;15. importorg.jfree.data.xy.XYDataset;16. 17. publicclassTimeSeriesChart18. ChartPanelframe1;19. publicTimeSeriesChart()20. XYDatasetxydataset=createDataset();21. JFreeChartjfreechart=ChartFactory.createTimeSeriesChart(Legal&General单位信托基金价格,日期,价格,xydataset,true,true,true);22. XYPlotxyplot=(XYPlot)jfreechart.getPlot();23. DateAxisdateaxis=(DateAxis)xyplot.getDomainAxis();24. dateaxis.setDateFormatOverride(newSimpleDateFormat(MMM-yyyy);25. frame1=newChartPanel(jfreechart,true);26. dateaxis.setLabelFont(newFont(黑体,Font.BOLD,14);/水平底部标题27. dateaxis.setTickLabelFont(newFont(宋体,Font.BOLD,12);/垂直标题28. ValueAxisrangeAxis=xyplot.getRangeAxis();/获取柱状29. rangeAxis.setLabelFont(newFont(黑体,Font.BOLD,15);30. jfreechart.getLegend().setItemFont(newFont(黑体,Font.BOLD,15);31. jfreechart.getTitle().setFont(newFont(宋体,Font.BOLD,20);/设置标题字体32. 33. 34. privatestaticXYDatasetcreateDataset()/这个数据集有点多,但都不难理解35. TimeSeriestimeseries=newTimeSeries(legal&general欧洲指数信任,36. org.jfree.data.time.Month.class);37. timeseries.add(newMonth(2,2001),181.80000000000001D);38. timeseries.add(newMonth(3,2001),167.30000000000001D);39. timeseries.add(newMonth(4,2001),153.80000000000001D);40. timeseries.add(newMonth(5,2001),167.59999999999999D);41. timeseries.add(newMonth(6,2001),158.80000000000001D);42. timeseries.add(newMonth(7,2001),148.30000000000001D);43. timeseries.add(newMonth(8,2001),153.90000000000001D);44. timeseries.add(newMonth(9,2001),142.69999999999999D);45. timeseries.add(newMonth(10,2001),123.2D);46. timeseries.add(newMonth(11,2001),131.80000000000001D);47. timeseries.add(newMonth(12,2001),139.59999999999999D);48. timeseries.add(newMonth(1,2002),142.90000000000001D);49. timeseries.add(newMonth(2,2002),138.69999999999999D);50. timeseries.add(newMonth(3,2002),137.30000000000001D);51. timeseries.add(newMonth(4,2002),143.90000000000001D);52. timeseries.add(newMonth(5,2002),139.80000000000001D);53. timeseries.add(newMonth(6,2002),137D);54. timeseries.add(newMonth(7,2002),132.80000000000001D);55. TimeSeriestimeseries1=newTimeSeries(legal&general英国指数信任,56. org.jfree.data.time.Month.class);57. timeseries1.add(newMonth(2,2001),129.59999999999999D);58. timeseries1.add(newMonth(3,2001),123.2D);59. timeseries1.add(newMonth(4,2001),117.2D);60. timeseries1.add(newMonth(5,2001),124.09999999999999D);61. timeseries1.add(newMonth(6,2001),122.59999999999999D);62. timeseries1.add(newMonth(7,2001),119.2D);63. timeseries1.add(newMonth(8,2001),116.5D);64. timeseries1.add(newMonth(9,2001),112.7D);65. timeseries1.add(newMonth(10,2001),101.5D);66. timeseries1.add(newMonth(11,2001),106.09999999999999D);67. timeseries1.add(newMonth(12,2001),110.3D);68. timeseries1.add(newMonth(1,2002),111.7D);69. timeseries1.add(newMonth(2,2002),111D);70. timeseries1.add(newMonth(3,2002),109.59999999999999D);71. timeseries1.add(newMonth(4,2002),113.2D);72. timeseries1.add(newMonth(5,2002),111.59999999999999D);73. timeseries1.add(newMonth(6,2002),108.8D);74. timeseries1.add(newMonth(7,2002),101.59999999999999D);75. TimeSeriesCollectiontimeseriescollection=newTimeSeriesCollection();76. timeseriescollection.addSeries(timeseries);77. timeseriescollection.addSeries(timeseries1);78. returntimeseriescollection;79. 80. publicChartPanelgetChartPanel()81. returnframe1;82. 83. 84. 效果图如下:再来看一下主方法:plainview plaincopy1. importjava.awt.GridLayout;2. 3. importjavax.swing.JFrame;4. 5. publicclassmainClass6. publicstaticvoidmain(Stringargs)7. JFrameframe=newJFrame(Java数据统计图);8. frame.setLayout(newGridLayout(2,2,10,10);9. frame.add(newBarChart().getChartPanel();/添加柱形图10. frame.add(newBarChart1().getChartPanel();/添加柱形图的另一种效果11. frame.add(newPieChart().getChartPanel();/添加饼状图12. frame.add(newTimeSeriesChart().getChartPanel();/添加折线图13. frame.setBounds(50,50,800,600);14. frame.setVisible(true);15. 16. 五,总结以上都是一个简单的例子去实现了,想了解更深的同学可自行查询资料,其实以上代码都通俗易懂,只要结合自己的实际情况,便可开发出属于自己的Application,大家可以看出我这里是在Application上实现的,其实更多情况数据统计图在javaweb上应用更多,大家也可自行了解。ps:如运行本文工程项目是出现错误,请参考博文:/pzhtpf/article/details/7506135JFreeChart入学教程2011-08-08 14:55:19|分类:技术篇|举报|字号订阅JFreeChart是一组功能强大、灵活易用的Java绘图API,使用它可以生成多种通用性的报表,包括柱状图、饼图、曲线图、甘特图等。它能够用在Swing和Web等中制作自定义的图表或报表,并且得到广泛的应用。本文将通过引领读者学习在JFreeChart中饼图、柱状图和曲线图的进阶应用,来达到熟练使用JFreeChart的目的。一下载与环境配置1. 下载JFreeChartJFreeChart是开放源代码的免费软件,但是它的支持文档需要付费才能得到。其下载地址为:/project/showfiles.php?group_id=15494,当前最新版本为1.0.13。笔者下载的是1.0.13最新版。说明:1)source目录:为jfreechart的源码目录; 2)lib目录:为包目录,我们需要关注的包为jfreechart-1.0.13.jar、gnujaxp.jar和jcommon-1.0.16.jar这三个包; 3)根目录下的jfreechart-1.0.13-demo.jar是例子程序,大家双击后可看到其中有很多例子的运行结果。2. 环境配置 笔者的开发环境如下: JDK:1.6 MyEclipse:6.6 Tomcat:6.0.18为了后续的“用JFreeChart创建基于Web的图表”的一个例子的展示,我们在MyEclipse中创建一个名为jfreechart的Web工程。将下载的JFreeChart1.0.6下lib目录下的jar包拷贝到WebRoot/WEB-INF/lib目录下。另外还需要在web.xml文件中增加如下配置:DisplayChartorg.jfree.chart.servlet.DisplayChartDisplayChart/DisplayChart二 柱状图在WebRoot目录下建立bar目录,用来存放柱状图的各个例子。首先在该目录下建立一个sample1.jsp文件,让我们来看一个简单的柱状图的例子,修改后的sample1.jsp的内容如下所示:img src= width=500 height=300 border=0 usemap=#在浏览器中输入地址:http:/localhost:8080/jfreechart/bar/sample1.jsp,可看到如下柱状图:上面的这个柱状图比较简单,稍显单调,在有些情况下,我们需要用不同颜色来表示不同的种类,或者在种类上标上具体数值,亦或需要加上3D水晶效果。下面让我们来做更深一步的探讨。接下来让我们看一个用不同颜色来表示不通种类的例子。在WebRoot的bar目录下新建sample2.jsp页面,将其代码修改如下:img src= width=500 height=300 border=0 usemap=#该页面的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小产权房屋合同协议书
- 租活动场地合同协议书
- 物业临时工合同协议书
- 实习生劳务合同协议书
- 意向合同和意向协议书
- 生活馆加盟合同协议书
- 无产权购房合同协议书
- 林地借用合同协议书模板
- 民间借款合同转移协议书
- 倒楼板合同协议书怎么写
- 转让店铺轮胎协议书
- 2025年辽宁省盘锦市中考数学二模试卷
- 完整版新修订《厉行节约反对浪费条例》(课件)
- (区县版)-中小学教辅材料征订专项整治工作方案
- 文员岗位笔试试题及答案
- 2025年制冷工职业技能竞赛参考试题库(共500题含答案)
- 安徽卓越县中联盟2024-2025学年高三下学期5月份检测物理试题+答案
- 2024年河北承德辰飞供电服务有限公司招聘真题
- 小米集团2024年环境、社会及管治报告(ESG)
- 手机媒体概论(自考14237)复习题库(含真题、典型题)
- 晶圆缺陷检测算法-全面剖析
评论
0/150
提交评论