`
ryan_ncu
  • 浏览: 69897 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

JFreeChart学习笔记

    博客分类:
  • JAVA
阅读更多

首先几个核心API要熟悉

JFreeChart     图表对象
XXXXDataset  数据集
XXXXPlot     图表区域对象,即具体的什么类型的图表,柱状,饼状等
XXXXAxis     X,Y轴对象
XXXXRenderer  负责如何显示图表对象
XXXXURLGenerator
XXXXToolTipGenerator

一般的实现步骤:

1.根据所要画的图,准备对应的数据集.

2.准备Plot,确定所要画的图的种类(如柱状,饼状等)

3.准备Axis,包括X,Y轴所表示的内容.

4.准备Renderer,确定如何显示图表对象

5.创建JFreeChart,把上面准备的相应参数传入.

6.保存图片到本地或传至WEB

java 代码
  1. package test;   
  2.   
  3. import java.awt.BasicStroke;   
  4. import java.awt.Color;   
  5. import java.awt.Font;   
  6. import java.io.FileOutputStream;   
  7. import java.io.IOException;   
  8. import java.text.DecimalFormat;   
  9. import java.text.SimpleDateFormat;   
  10. import java.util.TimeZone;   
  11.   
  12. import org.jfree.data.KeyToGroupMap;   
  13. import org.jfree.data.category.CategoryDataset;   
  14. import org.jfree.data.category.DefaultCategoryDataset;   
  15. import org.jfree.data.general.DefaultPieDataset;   
  16. import org.jfree.data.time.Month;   
  17. import org.jfree.data.time.TimeTableXYDataset;   
  18. import org.jfree.data.xy.XYDataset;   
  19. import org.jfree.ui.RectangleInsets;   
  20. import org.jfree.ui.TextAnchor;   
  21. import org.jfree.chart.*;   
  22. import org.jfree.chart.axis.CategoryAnchor;   
  23. import org.jfree.chart.axis.CategoryAxis;   
  24. import org.jfree.chart.axis.NumberAxis;   
  25. import org.jfree.chart.axis.PeriodAxis;   
  26. import org.jfree.chart.axis.PeriodAxisLabelInfo;   
  27. import org.jfree.chart.axis.ValueAxis;   
  28. import org.jfree.chart.labels.ItemLabelAnchor;   
  29. import org.jfree.chart.labels.ItemLabelPosition;   
  30. import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;   
  31. import org.jfree.chart.labels.StandardCategoryToolTipGenerator;   
  32. import org.jfree.chart.labels.StandardXYItemLabelGenerator;   
  33. import org.jfree.chart.labels.StandardXYToolTipGenerator;   
  34. import org.jfree.chart.plot.*;   
  35. import org.jfree.chart.renderer.category.CategoryItemRenderer;   
  36. import org.jfree.chart.renderer.category.GroupedStackedBarRenderer;   
  37. import org.jfree.chart.renderer.category.LineAndShapeRenderer;   
  38. import org.jfree.chart.renderer.xy.StackedXYBarRenderer;   
  39. import org.jfree.chart.renderer.xy.XYStepRenderer;   
  40.   
  41. public class ChartDemo {   
  42.   
  43.     public static void main(String[] args)    
  44.     {   
  45.         ChartDemo chartD = new ChartDemo();   
  46.         chartD.createBarDemo("bar.jpg");   
  47.         chartD.createPieDemo("pie.jpg");   
  48.         chartD.createXYBarDemo("xybar.jpg");   
  49.            
  50.     }   
  51.        
  52.     //创建柱状图   
  53.     public void createBarDemo(String jpgname)   
  54.     {   
  55.            
  56.         CategoryDataset dataset = getBarDataset();   
  57.         JFreeChart chart = ChartFactory.createStackedBarChart("月统计报表""统计月份""数据", dataset, PlotOrientation.VERTICAL, truetruefalse);   
  58.            
  59.         //创建Renderer   
  60.         GroupedStackedBarRenderer groupedstackedbarrenderer = new GroupedStackedBarRenderer();   
  61.            
  62.         //创建若干组,以便可分柱状,和叠方图   
  63.         KeyToGroupMap keytogroupmap = new KeyToGroupMap("G1");   
  64.         //目标为一组,实际,未完为另一组   
  65.         keytogroupmap.mapKeyToGroup("计划""G1");    
  66.         keytogroupmap.mapKeyToGroup("实际""G2");    
  67.         keytogroupmap.mapKeyToGroup("未完""G2");    
  68.             //设置组   
  69.         groupedstackedbarrenderer.setSeriesToGroupMap(keytogroupmap);   
  70.            
  71.         //显示数值   
  72.         groupedstackedbarrenderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());   
  73.             //可见?   
  74.         groupedstackedbarrenderer.setBaseItemLabelsVisible(true);   
  75.             //显示位置   
  76.         groupedstackedbarrenderer.setPositiveItemLabelPositionFallback(new ItemLabelPosition(ItemLabelAnchor.CENTER, TextAnchor.BOTTOM_CENTER));   
  77.         groupedstackedbarrenderer.setItemMargin(0.05000000000000001D);   
  78.            
  79.         //设置显示颜色   
  80.         groupedstackedbarrenderer.setSeriesPaint(0new Color(255137255)); // 粉红   
  81.         groupedstackedbarrenderer.setSeriesPaint(1new Color(011220));// BLUE   
  82.         groupedstackedbarrenderer.setSeriesPaint(2new Color(014852));// 绿色   
  83.            
  84.            
  85.         CategoryPlot categoryplot = (CategoryPlot)chart.getPlot();   
  86.         categoryplot.setDomainGridlinePosition(CategoryAnchor.MIDDLE);   
  87.            
  88.         //横网格线   
  89.         categoryplot.setRangeGridlinesVisible(true);   
  90.         //竖风格线   
  91.         categoryplot.setDomainGridlinesVisible(false);   
  92.            
  93.         //横轴   
  94.         CategoryAxis domainAxis=categoryplot.getDomainAxis();   
  95.         //间隔   
  96.         domainAxis.setCategoryMargin(0.2);   
  97.         //竖轴          
  98.         //ValueAxis valueaxis = categoryplot.getRangeAxis();   
  99.         //设置数值显示范围   
  100.         //valueaxis.setRange(0.0D, 30000D);   
  101.            
  102.         categoryplot.setRenderer(groupedstackedbarrenderer);   
  103.         categoryplot.setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD);   
  104.            
  105.         categoryplot.setDataset(1, dataset);   
  106.         categoryplot.mapDatasetToRangeAxis(11);   
  107.         //categoryplot.mapDatasetToRangeAxis(1, 2);   
  108.            
  109.            
  110.         NumberAxis numberaxis = new NumberAxis("费用");   
  111.         //numberaxis.setRange(0,90000);   
  112.         //设置右边的Y轴   
  113.         categoryplot.setRangeAxis(1, numberaxis);   
  114.            
  115.         LineAndShapeRenderer lineandshaperenderer = new LineAndShapeRenderer();   
  116.         lineandshaperenderer.setBaseToolTipGenerator(new StandardCategoryToolTipGenerator());   
  117.         lineandshaperenderer.setSeriesPaint(0new Color(255137255)); // 粉红   
  118.         lineandshaperenderer.setSeriesPaint(1new Color(0,11,220)); // 蓝色   
  119.            
  120.         categoryplot.setRenderer(1, lineandshaperenderer);   
  121.         categoryplot.setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD);   
  122.            
  123.                
  124.         this.savejpg(chart, jpgname);   
  125.     }   
  126.   
  127.     //获取柱状图数据   
  128.     private CategoryDataset getBarDataset()    
  129.     {   
  130.         DefaultCategoryDataset dataset = new DefaultCategoryDataset();   
  131.         String plan="计划";   
  132.         String actual="实际";   
  133.         String leave = "未完";   
  134.            
  135.         dataset.addValue(2000, plan, "一月");   
  136.         dataset.addValue(500, actual, "一月");   
  137.         dataset.addValue(1500, leave, "一月");   
  138.            
  139.         dataset.addValue(2000, plan, "二月");   
  140.         dataset.addValue(500, actual, "二月");   
  141.         dataset.addValue(1500, leave, "二月");   
  142.            
  143.         dataset.addValue(5000, plan, "三月");   
  144.         dataset.addValue(3200, actual, "三月");   
  145.         dataset.addValue(1800, leave, "三月");   
  146.            
  147.            
  148.            
  149.         return dataset;   
  150.            
  151.     }   
  152.        
  153.     //创建XYBar   
  154.     public void createXYBarDemo(String jpgname)   
  155.     {   
  156.         TimeTableXYDataset dataset = this.getXYDataset();   
  157.            
  158.         //设置X坐标轴   
  159.         PeriodAxis periodaxis = new PeriodAxis("时间");   
  160.         periodaxis.setTimeZone(TimeZone.getTimeZone("Pacific/Auckland"));   
  161.         periodaxis.setAutoRangeTimePeriodClass(org.jfree.data.time.Month.class);   
  162.         periodaxis.setMajorTickTimePeriodClass(org.jfree.data.time.Month.class);   
  163.         PeriodAxisLabelInfo aperiodaxislabelinfo[] = new PeriodAxisLabelInfo[2];   
  164.         aperiodaxislabelinfo[0] = new PeriodAxisLabelInfo(org.jfree.data.time.Month.class,    
  165.                 new SimpleDateFormat("MMM"),    
  166.                 new RectangleInsets(2D, 2D, 2D, 2D),    
  167.                 new Font("SansSerif"110),   
  168.                 Color.BLACK, falsenew BasicStroke(0.0F), Color.lightGray);   
  169.         aperiodaxislabelinfo[1] = new PeriodAxisLabelInfo(org.jfree.data.time.Year.classnew SimpleDateFormat("yyyy"));   
  170.         periodaxis.setLabelInfo(aperiodaxislabelinfo);   
  171.         periodaxis.setLowerMargin(0.01D);   
  172.         periodaxis.setUpperMargin(0.01D);   
  173.            
  174.         //设置Y坐标轴   
  175.         NumberAxis numberaxis = new NumberAxis("登入次数");   
  176.         numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());   
  177.         numberaxis.setUpperMargin(0.10000000000000001D);   
  178.         numberaxis.setRange(0,20000);   
  179.            
  180.         //设置Renderer   
  181.         StackedXYBarRenderer stackedxybarrenderer = new StackedXYBarRenderer(0.14999999999999999D);   
  182.         stackedxybarrenderer.setDrawBarOutline(true);   
  183.         stackedxybarrenderer.setBaseItemLabelsVisible(false);   
  184.         stackedxybarrenderer.setBaseItemLabelGenerator(new StandardXYItemLabelGenerator());   
  185.         stackedxybarrenderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.BOTTOM_CENTER));   
  186.         stackedxybarrenderer.setBaseToolTipGenerator(new StandardXYToolTipGenerator("{0} : {1} = {2}"new SimpleDateFormat("yyyy"), new DecimalFormat("0")));   
  187.         stackedxybarrenderer.setMargin(0.2);   
  188.            
  189.         stackedxybarrenderer.setSeriesPaint(0new Color(0,11,220));   
  190.         stackedxybarrenderer.setSeriesPaint(1new Color(51,129,50));   
  191.         stackedxybarrenderer.setSeriesPaint(2new Color(255,0,0));   
  192.            
  193.         XYPlot plot = new XYPlot(dataset,periodaxis,numberaxis,stackedxybarrenderer);//数据集,X轴,Y轴,renderer   
  194.         plot.setRangeGridlinesVisible(true);   
  195.         plot.setDomainGridlinesVisible(false);   
  196.         JFreeChart chart = new JFreeChart("工作量统计",plot);   
  197.            
  198.            
  199.         XYPlot xyplot1=(XYPlot)chart.getPlot();   
  200.            
  201.         XYStepRenderer xysteprenderer1 = new XYStepRenderer();   
  202.         xysteprenderer1.setBaseShapesVisible(true);   
  203.         xysteprenderer1.setSeriesStroke(0new BasicStroke(1F));   
  204.         xysteprenderer1.setSeriesPaint(0new Color(255,0,0));   
  205.         //xysteprenderer1.setBaseToolTipGenerator(new StandardXYToolTipGenerator());   
  206.         //xysteprenderer1.setDefaultEntityRadius(6);   
  207.         xyplot1.setDataset(1, getXYDatasetLevel1());   
  208.         xyplot1.setRenderer(1,xysteprenderer1);   
  209.   
  210.         XYStepRenderer xysteprenderer2 = new XYStepRenderer();   
  211.         xysteprenderer2.setBaseShapesVisible(true);   
  212.         xysteprenderer2.setSeriesStroke(0new BasicStroke(2.0F));   
  213.         xysteprenderer2.setSeriesPaint(0, Color.yellow);   
  214.         xyplot1.setDataset(2, getXYDatasetLevel2());   
  215.         xyplot1.setRenderer(2,xysteprenderer2);   
  216.            
  217.            
  218.         this.savejpg(chart, jpgname);   
  219.            
  220.     }   
  221.        
  222.     private TimeTableXYDataset getXYDataset()   
  223.     {   
  224.         TimeTableXYDataset dataset = new TimeTableXYDataset();   
  225.         dataset.add(new Month(1,2005), 8000"已完");   
  226.         dataset.add(new Month(1,2005), 2000"未完");   
  227.         dataset.add(new Month(2,2005), 8000"未完");   
  228.            
  229.            
  230.         return dataset;   
  231.     }   
  232.        
  233.     private XYDataset getXYDatasetLevel1()   
  234.     {   
  235.         TimeTableXYDataset ttd1 = new TimeTableXYDataset();// 目标   
  236.   
  237.         ttd1.add(new Month(1,2005), 8000"目标");   
  238.         ttd1.add(new Month(2,2005), 9000"目标");   
  239.         ttd1.add(new Month(3,2005), 10000"目标");   
  240.            
  241.         return ttd1;   
  242.     }   
  243.   
  244.     private XYDataset getXYDatasetLevel2()   
  245.     {   
  246.         TimeTableXYDataset ttd2 = new TimeTableXYDataset();// 分布   
  247.   
  248.         ttd2.add(new Month(1,2005), 2000"分布");   
  249.         ttd2.add(new Month(2,2005), 2000"分布");   
  250.            
  251.         return ttd2;   
  252.     }   
  253.        
  254.        
  255.     //创建饼图   
  256.     public void createPieDemo(String jpgname)   
  257.     {   
  258.         DefaultPieDataset dataset = getPieDataset();   
  259.         JFreeChart chart = ChartFactory.createPieChart3D("水果产量", dataset, truetruetrue);   
  260.            
  261.         this.savejpg(chart, jpgname);   
  262.     }   
  263.   
  264.     //获取饼图数据   
  265.     private DefaultPieDataset getPieDataset() {   
  266.         DefaultPieDataset dataset = new DefaultPieDataset();   
  267.         dataset.setValue("苹果"100);   
  268.         dataset.setValue("梨子"200);   
  269.         dataset.setValue("葡萄"300);   
  270.         dataset.setValue("荔枝"400);   
  271.         dataset.setValue("香蕉"500);   
  272.         dataset.setValue("枣子"600);   
  273.         return dataset;   
  274.     }   
  275.        
  276.        
  277.     //保存为本地图片   
  278.     private void savejpg(JFreeChart chart,String jpgname)   
  279.     {   
  280.         FileOutputStream jpg = null;   
  281.         try {   
  282.             jpg = new FileOutputStream(jpgname);   
  283.             ChartUtilities.writeChartAsJPEG(jpg,0.5f,chart,800,500,null);   
  284.                
  285.                
  286.         } catch (Exception e) {   
  287.             // TODO 自动生成 catch 块   
  288.             e.printStackTrace();   
  289.         }   
  290.         finally  
  291.         {   
  292.             try {   
  293.                 jpg.close();   
  294.             } catch (IOException e) {   
  295.                 // TODO 自动生成 catch 块   
  296.                 e.printStackTrace();   
  297.             }   
  298.         }   
  299.            
  300.     }   
  301.        
  302. }   
分享到:
评论

相关推荐

    Jfreechart学习笔记3-简单Line图形创建

    在本篇“JFreeChart学习笔记3-简单Line图形创建”中,我们将深入探讨如何使用JFreeChart库在Java环境中创建基本的线性图表。JFreeChart是一个强大的、开源的Java图表库,它允许开发者轻松地生成各种类型的图表,包括...

    Jfreechart学习笔记1-简单Pie图形创建

    **JFreeChart学习笔记1 - 简单Pie图创建** 在Java开发中,我们经常需要展示数据,而饼图(Pie Chart)是一种常见的数据可视化工具,尤其适用于展示各项比例关系。JFreeChart是一个强大的开源Java图表库,它提供了...

    JfreeChart 学习笔记

    ### JfreeChart 学习笔记:深度解析与应用 #### JFreeChart概览与核心功能 JFreeChart作为一款开源的JAVA项目,专为图表开发而设计,支持丰富的图表类型,包括饼图、柱状图(含普通及堆栈柱状图)、线图、散点图、...

    jfreechart学习笔记

    《JFreeChart学习详解》 JFreeChart是一个强大的Java库,用于生成高质量的图表,包括折线图、柱状图、饼图、散点图等多种类型。它在各种应用程序中广泛应用,尤其适合于Web应用程序中数据可视化的实现。本文将通过...

    Jfreechart学习笔记2-简单bar图形创建

    通过学习本文,你将能够利用JFreeChart轻松地生成美观的数据可视化图形。 首先,我们从`BarChart.java`开始。这个文件通常会包含创建2D条形图的基本步骤。以下是一些关键点: 1. 引入必要的库:确保引入了...

    JfreeChart学习笔记

    在本学习笔记中,我们将深入探讨如何使用 JFreeChart 来构建这些图表,特别是混合图和动态时序图。 首先,构建一个 JFreeChart 图表的基本步骤涉及以下三个主要部分: 1. **创建面板容器**:通常,我们可以继承 `...

    jfreechart实例教程+笔记+流程图

    首先,我们从 `jfreechart学习笔记.doc` 入手,这份文档应该包含了关于 JFreeChart 的基础知识和关键API的详细解释。通常,它会涵盖如何创建图表对象、设置图表类型、添加数据、定制图表样式等内容。例如,你可能会...

    Struts 学习笔记 Struts 中扩展JfreeChart 笔记

    JfreeChart则是一个强大的Java图表库,能够帮助开发者创建各种类型的图表,如饼图、柱状图、线图等,广泛应用于数据分析和展示。 在Struts框架中扩展JfreeChart,主要是为了在Web应用中生成动态的、交互式的图表,...

    jfreeChart笔记

    **JFreeChart 深度解析** JFreeChart 是一个流行的 Java 图表库,它提供了丰富的图表类型,如柱状图、...通过学习和实践,你可以利用 JFreeChart 实现各种复杂的图表需求,提升你的 Java 应用程序的数据可视化能力。

    jfreechart开发文档

    开发文档中的个人学习笔记和心得,通常会包含作者在实践过程中遇到的问题、解决方案和最佳实践,对于初学者来说是非常宝贵的参考资料。通过阅读这些笔记,可以更快地掌握JFreeChart的使用技巧。 9. **社区支持** ...

    Struts学习笔记

    在本学习笔记中,我们将深入探讨Struts的核心特性、国际化、类型转换以及JFreeChart的使用。 一、Struts框架基础 Struts 1是一个经典的Web MVC框架,它为开发者提供了强大的请求处理、页面导航、业务逻辑组织等功能...

    JFreeChart图表生成代码

    最后,`jfreechart的使用.wps`文档可能是作者整理的学习笔记,可能包含了一些实践中的技巧、问题解决方法和优化建议。这将是你深入学习JFreeChart的宝贵参考资料。 总结来说,这个资源包为学习和使用JFreeChart提供...

    Java学习笔记

    总之,"Java学习笔记"涵盖了从基础到进阶的众多Java主题,结合JFreeChart和iText这两个实用库,不仅提供了对Java编程语言的深入理解,还展示了其在数据可视化和文档生成方面的强大能力。对于任何希望提升Java技能的...

    iReport 4.5 学习笔记

    ### iReport 4.5 学习笔记 #### 一、iReport介绍 ##### 1.1 概述 iReport是一款专为JasperReports设计的强大且直观的报表设计器,支持复杂的报表设计,包括图表、图像、子报表等多种元素。这款工具完全基于Java...

    Ajax总结和java框架学习笔记

    ### Ajax技术概述与Java框架学习笔记 #### 一、Ajax技术简介 Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。它通过在后台与服务器进行少量数据交换,...

    JFreeChatDemo(我的例子)

    `笔记.txt` 文件可能包含了作者在开发过程中的一些笔记或教程,可能记录了如何配置和使用 `JFreeChartDemo` 的详细步骤。 通过运行 `JFreeChartDemo`,开发者可以了解如何使用 JFreeChart API 创建不同的图表,同时...

Global site tag (gtag.js) - Google Analytics