java实现各种数据统计图

上传人:1395****376 文档编号:49677319 上传时间:2022-01-18 格式:DOC 页数:22 大小:132.50KB
返回 下载 相关 举报
java实现各种数据统计图_第1页
第1页 / 共22页
java实现各种数据统计图_第2页
第2页 / 共22页
java实现各种数据统计图_第3页
第3页 / 共22页
点击查看更多>>
资源描述
精品文档,仅供学习与交流,如有侵权请联系网站删除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包与本文实例的工程(代码)一同压缩上传了,有兴趣的同学可以下载,下载地址:接下来,我们一步步来实现本程序。一,前期准备工作,也就把这三个第三方包添加进本文工程,添加过程特别简单,前面写过一篇博客,讲的是java如何读取Excel表格中的数据(有兴趣的同学可以看一看: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. importorg.jfree.chart.ChartFactory;3. importorg.jfree.chart.ChartPanel;4. importorg.jfree.chart.JFreeChart;5. importorg.jfree.chart.axis.CategoryAxis;6. importorg.jfree.chart.axis.ValueAxis;7. importorg.jfree.chart.plot.CategoryPlot;8. importorg.jfree.chart.plot.PlotOrientation;9. importorg.jfree.data.category.CategoryDataset;10. importorg.jfree.data.category.DefaultCategoryDataset;11. publicclassBarChart12. ChartPanelframe1;13. publicBarChart()14. CategoryDatasetdataset=getDataSet();15. JFreeChartchart=ChartFactory.createBarChart3D(16. 水果,/图表标题17. 水果种类,/目录轴的显示标签18. 数量,/数值轴的显示标签19. dataset,/数据集20. PlotOrientation.VERTICAL,/图表方向:水平、垂直21. true,/是否显示图例(对于简单的柱状图必须是false)22. false,/是否生成工具23. false/是否生成URL链接24. /从这里开始25. CategoryPlotplot=chart.getCategoryPlot();/获取图表区域对象26. CategoryAxisdomainAxis=plot.getDomainAxis();/水平底部列表27. domainAxis.setLabelFont(newFont(黑体,Font.BOLD,14);/水平底部标题28. domainAxis.setTickLabelFont(newFont(宋体,Font.BOLD,12);/垂直标题29. ValueAxisrangeAxis=plot.getRangeAxis();/获取柱状30. rangeAxis.setLabelFont(newFont(黑体,Font.BOLD,15);31. chart.getLegend().setItemFont(newFont(黑体,Font.BOLD,15);32. chart.getTitle().setFont(newFont(宋体,Font.BOLD,20);/设置标题字体33. /到这里结束,虽然代码有点多,但只为一个目的,解决汉字乱码问题34. frame1=newChartPanel(chart,true);/这里也可以用chartFrame,可以直接生成一个独立的Frame35. privatestaticCategoryDatasetgetDataSet()36. DefaultCategoryDatasetdataset=newDefaultCategoryDataset();37. dataset.addValue(100,北京,苹果);38. dataset.addValue(100,上海,苹果);39. dataset.addValue(100,广州,苹果);40. dataset.addValue(200,北京,梨子);41. dataset.addValue(200,上海,梨子);42. dataset.addValue(200,广州,梨子);43. dataset.addValue(300,北京,葡萄);44. dataset.addValue(300,上海,葡萄);45. dataset.addValue(300,广州,葡萄);46. dataset.addValue(400,北京,香蕉);47. dataset.addValue(400,上海,香蕉);48. dataset.addValue(400,广州,香蕉);49. dataset.addValue(500,北京,荔枝);50. dataset.addValue(500,上海,荔枝);51. dataset.addValue(500,广州,荔枝);52. returndataset;53. publicChartPanelgetChartPanel()54. returnframe1;效果图如下:但我们把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;效果图如下:三,实现饼状图的java代码:plainview plaincopy1. packagecom.njue.testJFreeChart;2. importjava.awt.Font;3. importjava.text.DecimalFormat;4. importjava.text.NumberFormat;5. importjavax.swing.JPanel;6. importorg.jfree.chart.ChartFactory;7. importorg.jfree.chart.ChartPanel;8. importorg.jfree.chart.JFreeChart;9. importorg.jfree.chart.labels.StandardPieSectionLabelGenerator;10. importorg.jfree.chart.plot.PiePlot;11. importorg.jfree.data.general.DefaultPieDataset;12. publicclassPieChart13. ChartPanelframe1;14. publicPieChart()15. DefaultPieDatasetdata=getDataSet();16. JFreeChartchart=ChartFactory.createPieChart3D(水果产量,data,true,false,false);17. /设置百分比18. PiePlotpieplot=(PiePlot)chart.getPlot();19. DecimalFormatdf=newDecimalFormat(0.00%);/获得一个DecimalFormat对象,主要是设置小数问题20. NumberFormatnf=NumberFormat.getNumberInstance();/获得一个NumberFormat对象21. StandardPieSectionLabelGeneratorsp1=newStandardPieSectionLabelGenerator(02,nf,df);/获得StandardPieSectionLabelGenerator对象22. pieplot.setLabelGenerator(sp1);/设置饼图显示百分比23. /没有数据的时候显示的内容24. pieplot.setNoDataMessage(无数据显示);25. pieplot.setCircular(false);26. pieplot.setLabelGap(0.02D);27. pieplot.setIgnoreNullValues(true);/设置不显示空值28. pieplot.setIgnoreZeroValues(true);/设置不显示负值29. frame1=newChartPanel(chart,true);30. chart.getTitle().setFont(newFont(宋体,Font.BOLD,20);/设置标题字体31. PiePlotpiePlot=(PiePlot)chart.getPlot();/获取图表区域对象32. piePlot.setLabelFont(newFont(宋体,Font.BOLD,10);/解决乱码33. chart.getLegend().setItemFont(newFont(黑体,Font.BOLD,10);34. privatestaticDefaultPieDatasetgetDataSet()35. DefaultPieDatasetdataset=newDefaultPieDataset();36. dataset.setValue(苹果,100);37. dataset.setValue(梨子,200);38. dataset.setValue(葡萄,300);39. dataset.setValue(香蕉,400);40. dataset.setValue(荔枝,500);41. returndataset;42. publicChartPanelgetChartPanel()43. returnframe1;效果图如下:四,实现折线图的java代码:plainview plaincopy1. packagecom.njue.testJFreeChart;2. importjava.awt.Font;3. importjava.text.SimpleDateFormat;4. importorg.jfree.chart.ChartFactory;5. importorg.jfree.chart.ChartPanel;6. importorg.jfree.chart.JFreeChart;7. importorg.jfree.chart.axis.DateAxis;8. importorg.jfree.chart.axis.ValueAxis;9. importorg.jfree.chart.plot.XYPlot;10. importorg.jfree.data.time.Month;11. importorg.jfree.data.time.TimeSeries;12. importorg.jfree.data.time.TimeSeriesCollection;13. importorg.jfree.data.xy.XYDataset;14. publicclassTimeSeriesChart15. ChartPanelframe1;16. publicTimeSeriesChart()17. XYDatasetxydataset=createDataset();18. JFreeChartjfreechart=ChartFactory.createTimeSeriesChart(Legal&General单位信托基金价格,日期,价格,xydataset,true,true,true);19. XYPlotxyplot=(XYPlot)jfreechart.getPlot();20. DateAxisdateaxis=(DateAxis)xyplot.getDomainAxis();21. dateaxis.setDateFormatOverride(newSimpleDateFormat(MMM-yyyy);22. frame1=newChartPanel(jfreechart,true);23. dateaxis.setLabelFont(newFont(黑体,Font.BOLD,14);/水平底部标题24. dateaxis.setTickLabelFont(newFont(宋体,Font.BOLD,12);/垂直标题25. ValueAxisrangeAxis=xyplot.getRangeAxis();/获取柱状26. rangeAxis.setLabelFont(newFont(黑体,Font.BOLD,15);27. jfreechart.getLegend().setItemFont(newFont(黑体,Font.BOLD,15);28. jfreechart.getTitle().setFont(newFont(宋体,Font.BOLD,20);/设置标题字体29. privatestaticXYDatasetcreateDataset()/这个数据集有点多,但都不难理解30. TimeSeriestimeseries=newTimeSeries(legal&general欧洲指数信任,31. org.jfree.data.time.Month.class);32. timeseries.add(newMonth(2,2001),181.80000000000001D);33. timeseries.add(newMonth(3,2001),167.30000000000001D);34. timeseries.add(newMonth(4,2001),153.80000000000001D);35. timeseries.add(newMonth(5,2001),167.59999999999999D);36. timeseries.add(newMonth(6,2001),158.80000000000001D);37. timeseries.add(newMonth(7,2001),148.30000000000001D);38. timeseries.add(newMonth(8,2001),153.90000000000001D);39. timeseries.add(newMonth(9,2001),142.69999999999999D);40. timeseries.add(newMonth(10,2001),123.2D);41. timeseries.add(newMonth(11,2001),131.80000000000001D);42. timeseries.add(newMonth(12,2001),139.59999999999999D);43. timeseries.add(newMonth(1,2002),142.90000000000001D);44. timeseries.add(newMonth(2,2002),138.69999999999999D);45. timeseries.add(newMonth(3,2002),137.30000000000001D);46. timeseries.add(newMonth(4,2002),143.90000000000001D);47. timeseries.add(newMonth(5,2002),139.80000000000001D);48. timeseries.add(newMonth(6,2002),137D);49. timeseries.add(newMonth(7,2002),132.80000000000001D);50. TimeSeriestimeseries1=newTimeSeries(legal&general英国指数信任,51. org.jfree.data.time.Month.class);52. timeseries1.add(newMonth(2,2001),129.59999999999999D);53. timeseries1.add(newMonth(3,2001),123.2D);54. timeseries1.add(newMonth(4,2001),117.2D);55. timeseries1.add(newMonth(5,2001),124.09999999999999D);56. timeseries1.add(newMonth(6,2001),122.59999999999999D);57. timeseries1.add(newMonth(7,2001),119.2D);58. timeseries1.add(newMonth(8,2001),116.5D);59. timeseries1.add(newMonth(9,2001),112.7D);60. timeseries1.add(newMonth(10,2001),101.5D);61. timeseries1.add(newMonth(11,2001),106.09999999999999D);62. timeseries1.add(newMonth(12,2001),110.3D);63. timeseries1.add(newMonth(1,2002),111.7D);64. timeseries1.add(newMonth(2,2002),111D);65. timeseries1.add(newMonth(3,2002),109.59999999999999D);66. timeseries1.add(newMonth(4,2002),113.2D);67. timeseries1.add(newMonth(5,2002),111.59999999999999D);68. timeseries1.add(newMonth(6,2002),108.8D);69. timeseries1.add(newMonth(7,2002),101.59999999999999D);70. TimeSeriesCollectiontimeseriescollection=newTimeSeriesCollection();71. timeseriescollection.addSeries(timeseries);72. timeseriescollection.addSeries(timeseries1);73. returntimeseriescollection;74. publicChartPanelgetChartPanel()75. returnframe1;效果图如下:再来看一下主方法:plainview plaincopy1. importjava.awt.GridLayout;2. importjavax.swing.JFrame;3. publicclassmainClass4. publicstaticvoidmain(Stringargs)5. JFrameframe=newJFrame(Java数据统计图);6. frame.setLayout(newGridLayout(2,2,10,10);7. frame.add(newBarChart().getChartPanel();/添加柱形图8. frame.add(newBarChart1().getChartPanel();/添加柱形图的另一种效果9. frame.add(newPieChart().getChartPanel();/添加饼状图10. frame.add(newTimeSeriesChart().getChartPanel();/添加折线图11. frame.setBounds(50,50,800,600);12. frame.setVisible(true);五,总结以上都是一个简单的例子去实现了,想了解更深的同学可自行查询资料,其实以上代码都通俗易懂,只要结合自己的实际情况,便可开发出属于自己的Application,大家可以看出我这里是在Application上实现的,其实更多情况数据统计图在javaweb上应用更多,大家也可自行了解。ps:如运行本文工程项目是出现错误,请参考博文:JFreeChart入学教程2011-08-08 14:55:19|分类:技术篇|举报|字号订阅JFreeChart是一组功能强大、灵活易用的Java绘图API,使用它可以生成多种通用性的报表,包括柱状图、饼图、曲线图、甘特图等。它能够用在Swing和Web等中制作自定义的图表或报表,并且得到广泛的应用。本文将通过引领读者学习在JFreeChart中饼图、柱状图和曲线图的进阶应用,来达到熟练使用JFreeChart的目的。一下载与环境配置1. 下载JFreeChartJFreeChart是开放源代码的免费软件,但是它的支持文档需要付费才能得到。其下载地址为:说明: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=#该页面的运行效果如下图所示:对比该例与前例,可看出createBarChart3D的倒数第三个参数修改成了true,该参数可用来显示下方的方框 。上两例我们显示的只是一个城市的肉类销量,有时候我们有对比显示多个城市的不同肉类,只要将上例稍作修改即可。例如要在图中表示广州、深圳、东莞、佛山四个城市的四个肉类的销售情况,只需要将如下三句稍做修改:double data =newdouble 1310, 720, 1130, 440;String rowKeys = pig, beef,chicken, fish;String columnKeys = ;例如修改成:double data =newdouble 1310, 1220, 1110, 1000,720, 700, 680, 640,1130, 1020, 980, 800,440, 400, 360, 300;String rowKeys = pig, beef,chicken, fish;String columnKeys = Guangzhou, Shenzhen, Dongguan, Foshan;在运行该jsp页面,可看到如下界面: 在上述几例中,在某个柱子上都没有显示相应的数值,下面让我们为每个柱子都加上它的数值,我们新建一个sample4.jsp页面,其内容如下:img src= width=700 height=400 border=0 usemap=#运行效果如下所示:注意:jfreechart的很多版本不兼容,请大家在运行此例时确认下载了对应的版本。三 饼图在WebRoot目录下建立名为pie的子目录,用来存放本教程中饼图的实例jsp页面。下面让我们来看一个简单的三维饼图。首先在pie目录下建立一个名为sample1.jsp的页面。在JFreeChart中,与饼图绘制密切相关的类如下:1) PiePlot饼图绘制类,可以用来设置饼图的相关属性。例如:PiePlot pieplot = (PiePlot)jfreechart.getPlot();pieplot.setLabelFont(new Font(SansSerif, 0, 12);pieplot.setNoDataMessage(No data available);pieplot.setCircular(false);pieplot.setLabelGap(0.02D);2) DefaultPieDataset默认的饼图数据集类,用来存储饼图显示的相关数据信息。例如:DefaultPieDataset dataset = new DefaultPieDataset();dataset.setValue(品德, new Double(0.2D);dataset.setValue(体育, new Double(0.2D);dataset.setValue(音乐, new Double(0.2D);dataset.setValue(其余成绩, new Double(0.4D);3) ChartFactory可利用该制图工厂类createPieChart来创建一个饼图的JFreeChart对象,例如:JFreeChart jfreechart = ChartFactory.createPieChart(饼图示例, dataset, true, true, false); 下面让我们看一个简单的例子,修改sample1.jsp的内容如下:%/设置数据集DefaultPieDataset dataset = new DefaultPieDataset();dataset
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 中学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!