1、java实现各种数据统计图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,但这三个包要齐全,我已经将所有
2、与jfreechart有关的jar包与本文实例的工程(代码)一同压缩上传了,有兴趣的同学可以下载,下载地址:接下来,我们一步步来实现本程序。一,前期准备工作,也就把这三个第三方包添加进本文工程,添加过程特别简单,前面写过一篇博客,讲的是java如何读取Excel表格中的数据(有兴趣的同学可以看一看:1,建,立java项目,在这个项目在建立一个新的文件夹lib;2,将上述三个jar包,复制到lib3,然后右键点击这个java项目,选择Properties4,在左侧列表里选中Java Build Path,右侧选中Libraries5,点击Add JARs6,然后去选择这个项目中lib文件夹中的三
3、个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.
4、 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(
5、);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
6、. 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().set
7、ItemFont(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=newDe
8、faultCategoryDataset();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(
9、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. 效果图如下:但我们把p
10、rivatestaticCategoryDataset getDataSet()方法中的数据变化一下后,又会形成另一种效果,比如说我们改成:plainview plaincopy1. privatestaticCategoryDatasetgetDataSet()2. DefaultCategoryDatasetdataset=newDefaultCategoryDataset();3. dataset.addValue(100,苹果,苹果);4. dataset.addValue(200,梨子,梨子);5. dataset.addValue(300,葡萄,葡萄);6. dataset.add
11、Value(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.ChartFac
12、tory;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. publicPieChar
13、t()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();
14、/获得一个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
15、.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,1
16、0);/解决乱码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.set
17、Value(荔枝,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.char
18、t.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. i
19、mportorg.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)jfreech
20、art.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. Val
21、ueAxisrangeAxis=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. TimeSe
22、riestimeseries=newTimeSeries(legal&general欧洲指数信任,36. org.jfree.data.time.Month.class);37. timeseries.add(newMonth(2,2001),181.801D);38. timeseries.add(newMonth(3,2001),167.301D);39. timeseries.add(newMonth(4,2001),153.801D);40. timeseries.add(newMonth(5,2001),167.59999999999999D);41. timeseries.add(
23、newMonth(6,2001),158.801D);42. timeseries.add(newMonth(7,2001),148.301D);43. timeseries.add(newMonth(8,2001),153.901D);44. timeseries.add(newMonth(9,2001),142.69999999999999D);45. timeseries.add(newMonth(10,2001),123.2D);46. timeseries.add(newMonth(11,2001),131.801D);47. timeseries.add(newMonth(12,2001),139.59999999999999D);48. timeseries.add(newMonth(1,2002),142.901D);49. timeseries.add(newMonth(2,2002),138.69999999999999D);50. timeseries.add(newMonth(3,2002),137.301D);51. timeseries.add(newMonth(4,2002),143.
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1