`
baobeituping
  • 浏览: 1071230 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

JFreeChart生成图表

阅读更多
  1. package com.yyh.jfreechart;   
  2.   
  3. import java.awt.Color;   
  4. import java.awt.Font;   
  5. import java.io.File;   
  6. import java.io.FileOutputStream;   
  7. import java.text.DecimalFormat;   
  8. import java.text.NumberFormat;   
  9.   
  10. import org.jfree.chart.ChartFactory;   
  11. import org.jfree.chart.ChartUtilities;   
  12. import org.jfree.chart.JFreeChart;   
  13. import org.jfree.chart.axis.CategoryAxis;   
  14. import org.jfree.chart.axis.CategoryLabelPositions;   
  15. import org.jfree.chart.axis.NumberAxis;   
  16. import org.jfree.chart.axis.ValueAxis;   
  17. import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;   
  18. import org.jfree.chart.labels.StandardPieSectionLabelGenerator;   
  19. import org.jfree.chart.plot.CategoryPlot;   
  20. import org.jfree.chart.plot.PiePlot3D;   
  21. import org.jfree.chart.plot.PlotOrientation;   
  22. import org.jfree.chart.renderer.category.BarRenderer;   
  23. import org.jfree.chart.renderer.category.LineAndShapeRenderer;   
  24. import org.jfree.chart.renderer.category.StackedBarRenderer;   
  25. import org.jfree.chart.title.TextTitle;   
  26. import org.jfree.data.category.CategoryDataset;   
  27. import org.jfree.data.general.DatasetUtilities;   
  28. import org.jfree.data.general.DefaultPieDataset;   
  29. import org.jfree.data.general.PieDataset;   
  30.   
  31. /**  
  32.  * 实际取色的时候一定要16位的,这样比较准确  
  33.  *   
  34.  * @author new  
  35.  */  
  36. public class CreateChartServiceImpl {   
  37.   
  38.     private static final String CHART_PATH = "E:/test/";   
  39.   
  40.     public static void main(String[] args) {   
  41.         // TODO Auto-generated method stub   
  42.         CreateChartServiceImpl pm = new CreateChartServiceImpl();   
  43.         // 生成饼状图   
  44.         pm.makePieChart();   
  45.         // 生成单组柱状图   
  46.         pm.makeBarChart();   
  47.         // 生成多组柱状图   
  48.         pm.makeBarGroupChart();   
  49.         // 生成堆积柱状图   
  50.         pm.makeStackedBarChart();   
  51.         // 生成折线图   
  52.         pm.makeLineAndShapeChart();   
  53.     }   
  54.   
  55.     /**  
  56.      * 生成折线图  
  57.      */  
  58.     public void makeLineAndShapeChart() {   
  59.         double[][] data = new double[][]{   
  60.             {672766223540126},   
  61.             {325521210340106},   
  62.             {332256523240526}   
  63.         };   
  64.         String[] rowKeys = {"苹果""梨子""葡萄"};   
  65.         String[] columnKeys = {"北京""上海""广州""成都""深圳"};   
  66.         CategoryDataset dataset = getBarData(data, rowKeys, columnKeys);   
  67.         createTimeXYChar("折线图""x轴""y轴", dataset, "lineAndShap.png");   
  68.     }   
  69.   
  70.     /**  
  71.      * 生成分组的柱状图  
  72.      */  
  73.     public void makeBarGroupChart() {   
  74.         double[][] data = new double[][]{   
  75.             {672766223540126},   
  76.             {325521210340106},   
  77.             {332256523240526}   
  78.         };   
  79.         String[] rowKeys = {"苹果""梨子""葡萄"};   
  80.         String[] columnKeys = {"北京""上海""广州""成都""深圳"};   
  81.         CategoryDataset dataset = getBarData(data, rowKeys, columnKeys);   
  82.         createBarChart(dataset, "x坐标""y坐标""柱状图""barGroup.png");   
  83.     }   
  84.   
  85.     /**  
  86.      * 生成柱状图  
  87.      */  
  88.     public void makeBarChart() {   
  89.         double[][] data = new double[][]{   
  90.             {672766223540126}   
  91.         };   
  92.         String[] rowKeys = {"苹果"};   
  93.         String[] columnKeys = {"北京""上海""广州""成都""深圳"};   
  94.         CategoryDataset dataset = getBarData(data, rowKeys, columnKeys);   
  95.         createBarChart(dataset, "x坐标""y坐标""柱状图""bar.png");   
  96.     }   
  97.   
  98.     /**  
  99.      * 生成堆栈柱状图  
  100.      */  
  101.     public void makeStackedBarChart() {   
  102.         double[][] data = new double[][]{   
  103.             {0.210.660.230.400.26},   
  104.             {0.250.210.100.400.16}   
  105.         };   
  106.         String[] rowKeys = {"苹果""梨子"};   
  107.         String[] columnKeys = {"北京""上海""广州""成都""深圳"};   
  108.         CategoryDataset dataset = getBarData(data, rowKeys, columnKeys);   
  109.         createStackedBarChart(dataset, "x坐标""y坐标""柱状图""stsckedBar.png");   
  110.     }   
  111.   
  112.     /**  
  113.      * 生成饼状图  
  114.      */  
  115.     public void makePieChart() {   
  116.         double[] data = {991};   
  117.         String[] keys = {"失败率""成功率"};   
  118.   
  119.         createValidityComparePimChar(getDataPieSetByUtil(data, keys), "饼状图",   
  120.                 "pie2.png", keys);   
  121.     }   
  122.   
  123.     // 柱状图,折线图 数据集   
  124.     public CategoryDataset getBarData(double[][] data, String[] rowKeys,   
  125.             String[] columnKeys) {   
  126.         return DatasetUtilities.createCategoryDataset(rowKeys, columnKeys, data);   
  127.   
  128.     }   
  129.   
  130.     // 饼状图 数据集   
  131.     public PieDataset getDataPieSetByUtil(double[] data,   
  132.             String[] datadescription) {   
  133.   
  134.         if (data != null && datadescription != null) {   
  135.             if (data.length == datadescription.length) {   
  136.                 DefaultPieDataset dataset = new DefaultPieDataset();   
  137.                 for (int i = 0; i < data.length; i++) {   
  138.                     dataset.setValue(datadescription[i], data[i]);   
  139.                 }   
  140.                 return dataset;   
  141.             }   
  142.   
  143.         }   
  144.   
  145.         return null;   
  146.     }   
  147.   
  148.     /**  
  149.      * 柱状图  
  150.      *   
  151.      *@param dataset 数据集  
  152.      * @param xName x轴的说明(如种类,时间等)  
  153.      * @param yName y轴的说明(如速度,时间等)  
  154.      * @param chartTitle 图标题  
  155.      * @param charName 生成图片的名字  
  156.      * @return  
  157.      */  
  158.     public String createBarChart(CategoryDataset dataset, String xName,   
  159.             String yName, String chartTitle, String charName) {   
  160.         JFreeChart chart = ChartFactory.createBarChart(chartTitle, // 图表标题   
  161.                 xName, // 目录轴的显示标签   
  162.                 yName, // 数值轴的显示标签   
  163.                 dataset, // 数据集   
  164.                 PlotOrientation.VERTICAL, // 图表方向:水平、垂直   
  165.                 true// 是否显示图例(对于简单的柱状图必须是false)   
  166.                 false// 是否生成工具   
  167.                 false // 是否生成URL链接   
  168.                 );   
  169.         Font labelFont = new Font("SansSerif", Font.TRUETYPE_FONT, 12);   
  170.         /*  
  171.          * VALUE_TEXT_ANTIALIAS_OFF表示将文字的抗锯齿关闭,  
  172.          * 使用的关闭抗锯齿后,字体尽量选择12到14号的宋体字,这样文字最清晰好看  
  173.          */  
  174.         // chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);   
  175.         chart.setTextAntiAlias(false);   
  176.         chart.setBackgroundPaint(Color.white);   
  177.         // create plot   
  178.         CategoryPlot plot = chart.getCategoryPlot();   
  179.         // 设置横虚线可见   
  180.         plot.setRangeGridlinesVisible(true);   
  181.         // 虚线色彩   
  182.         plot.setRangeGridlinePaint(Color.gray);   
  183.   
  184.         // 数据轴精度   
  185.         NumberAxis vn = (NumberAxis) plot.getRangeAxis();   
  186.         // vn.setAutoRangeIncludesZero(true);   
  187.         DecimalFormat df = new DecimalFormat("#0.00");   
  188.         vn.setNumberFormatOverride(df); // 数据轴数据标签的显示格式   
  189.         // x轴设置   
  190.   
  191.         CategoryAxis domainAxis = plot.getDomainAxis();   
  192.         domainAxis.setLabelFont(labelFont);// 轴标题   
  193.   
  194.         domainAxis.setTickLabelFont(labelFont);// 轴数值   
  195.   
  196.         // Lable(Math.PI/3.0)度倾斜   
  197.         // domainAxis.setCategoryLabelPositions(CategoryLabelPositions   
  198.         // .createUpRotationLabelPositions(Math.PI / 3.0));   
  199.   
  200.         domainAxis.setMaximumCategoryLabelWidthRatio(0.6f);// 横轴上的 Lable 是否完整显示   
  201.   
  202.         // 设置距离图片左端距离   
  203.         domainAxis.setLowerMargin(0.1);   
  204.         // 设置距离图片右端距离   
  205.         domainAxis.setUpperMargin(0.1);   
  206.         // 设置 columnKey 是否间隔显示   
  207.         // domainAxis.setSkipCategoryLabelsToFit(true);   
  208.   
  209.         plot.setDomainAxis(domainAxis);   
  210.         // 设置柱图背景色(注意,系统取色的时候要使用16位的模式来查看颜色编码,这样比较准确)   
  211.         plot.setBackgroundPaint(new Color(255255204));   
  212.   
  213.         // y轴设置   
  214.         ValueAxis rangeAxis = plot.getRangeAxis();   
  215.         rangeAxis.setLabelFont(labelFont);   
  216.         rangeAxis.setTickLabelFont(labelFont);   
  217.         // 设置最高的一个 Item 与图片顶端的距离   
  218.         rangeAxis.setUpperMargin(0.15);   
  219.         // 设置最低的一个 Item 与图片底端的距离   
  220.         rangeAxis.setLowerMargin(0.15);   
  221.         plot.setRangeAxis(rangeAxis);   
  222.   
  223.         BarRenderer renderer = new BarRenderer();   
  224.         // 设置柱子宽度   
  225.         renderer.setMaximumBarWidth(0.05);   
  226.         // 设置柱子高度   
  227.         renderer.setMinimumBarLength(0.2);   
  228.         // 设置柱子边框颜色   
  229.         renderer.setBaseOutlinePaint(Color.BLACK);   
  230.         // 设置柱子边框可见   
  231.         renderer.setDrawBarOutline(true);   
  232.   
  233.         // // 设置柱的颜色   
  234.         renderer.setSeriesPaint(0new Color(204255255));   
  235.         renderer.setSeriesPaint(1new Color(153204255));   
  236.         renderer.setSeriesPaint(2new Color(51204204));   
  237.   
  238.         // 设置每个地区所包含的平行柱的之间距离   
  239.         renderer.setItemMargin(0.0);   
  240.   
  241.         // 显示每个柱的数值,并修改该数值的字体属性   
  242.         renderer.setIncludeBaseInRange(true);   
  243.         renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());   
  244.         renderer.setBaseItemLabelsVisible(true);   
  245.   
  246.         plot.setRenderer(renderer);   
  247.         // 设置柱的透明度   
  248.         plot.setForegroundAlpha(1.0f);   
  249.   
  250.         FileOutputStream fos_jpg = null;   
  251.         try {   
  252.             isChartPathExist(CHART_PATH);   
  253.             String chartName = CHART_PATH + charName;   
  254.             fos_jpg = new FileOutputStream(chartName);   
  255.             ChartUtilities.writeChartAsPNG(fos_jpg, chart, 500500true10);   
  256.             return chartName;   
  257.         } catch (Exception e) {   
  258.             e.printStackTrace();   
  259.             return null;   
  260.         } finally {   
  261.             try {   
  262.                 fos_jpg.close();   
  263.             } catch (Exception e) {   
  264.                 e.printStackTrace();   
  265.             }   
  266.         }   
  267.     }   
  268.   
  269.     /**  
  270.      * 横向图  
  271.      *   
  272.      * @param dataset 数据集  
  273.      * @param xName x轴的说明(如种类,时间等)  
  274.      * @param yName y轴的说明(如速度,时间等)  
  275.      * @param chartTitle 图标题  
  276.      * @param charName 生成图片的名字  
  277.      * @return  
  278.      */  
  279.     public String createHorizontalBarChart(CategoryDataset dataset,   
  280.             String xName, String yName, String chartTitle, String charName) {   
  281.         JFreeChart chart = ChartFactory.createBarChart(chartTitle, // 图表标题   
  282.                 xName, // 目录轴的显示标签   
  283.                 yName, // 数值轴的显示标签   
  284.                 dataset, // 数据集   
  285.                 PlotOrientation.VERTICAL, // 图表方向:水平、垂直   
  286.                 true// 是否显示图例(对于简单的柱状图必须是false)   
  287.                 false// 是否生成工具   
  288.                 false // 是否生成URL链接   
  289.                 );   
  290.   
  291.         CategoryPlot plot = chart.getCategoryPlot();   
  292.         // 数据轴精度   
  293.         NumberAxis vn = (NumberAxis) plot.getRangeAxis();   
  294.         //设置刻度必须从0开始   
  295.         // vn.setAutoRangeIncludesZero(true);   
  296.         DecimalFormat df = new DecimalFormat("#0.00");   
  297.         vn.setNumberFormatOverride(df); // 数据轴数据标签的显示格式   
  298.   
  299.         CategoryAxis domainAxis = plot.getDomainAxis();   
  300.   
  301.         domainAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45); // 横轴上的   
  302.         // Lable   
  303.   
  304.         Font labelFont = new Font("SansSerif", Font.TRUETYPE_FONT, 12);   
  305.   
  306.         domainAxis.setLabelFont(labelFont);// 轴标题   
  307.   
  308.         domainAxis.setTickLabelFont(labelFont);// 轴数值   
  309.   
  310.         domainAxis.setMaximumCategoryLabelWidthRatio(0.8f);// 横轴上的 Lable 是否完整显示   
  311.         // domainAxis.setVerticalCategoryLabels(false);   
  312.   
  313.         plot.setDomainAxis(domainAxis);   
  314.   
  315.         ValueAxis rangeAxis = plot.getRangeAxis();   
  316.         // 设置最高的一个 Item 与图片顶端的距离   
  317.         rangeAxis.setUpperMargin(0.15);   
  318.         // 设置最低的一个 Item 与图片底端的距离   
  319.         rangeAxis.setLowerMargin(0.15);   
  320.         plot.setRangeAxis(rangeAxis);   
  321.         BarRenderer renderer = new BarRenderer();   
  322.         // 设置柱子宽度   
  323.         renderer.setMaximumBarWidth(0.03);   
  324. &nb
分享到:
评论

相关推荐

    在 JavaFx 中使用 JFreeChart 生成图表

    以上就是在JavaFX中使用JFreeChart生成图表的基本流程。为了使图表更具交互性,还可以添加事件监听器,如点击图表元素时触发特定操作。此外,JFreeChart提供了丰富的配置选项,可以调整图表的外观,如颜色、线条样式...

    JFreeChart生成图表的例子.rar

    这个例子的压缩包“JFreeChart生成图表的例子.rar”包含了一些示例代码,帮助开发者理解如何利用JFreeChart在Java应用程序中生成图表。 JFreeChart库的核心功能在于它提供了丰富的API,允许开发者自定义图表的各个...

    在Struts中用JFreeChart生成图表

    ### 在Struts中使用JFreeChart生成图表 #### 一、引言 随着Web应用程序功能需求的日益增加,用户不仅需要获取数据,还希望能够直观地理解这些数据所代表的意义。图表作为一种直观的数据可视化手段,在现代Web应用...

    Jfreechart生成图表的一个例子

    这个例子将引导我们了解如何利用JFreeChart在Java应用程序中生成这些图表,非常适合初学者入门。 首先,我们需要理解JFreeChart的基本结构。JFreeChart的核心是`ChartFactory`类,它提供了创建各种图表类型的方法。...

    Freemarker导出word示例,包括jfreechart图表

    在本示例中,我们将使用JFreeChart生成图表,然后将生成的图表嵌入到Freemarker模板生成的Word文档中。 生成图表的过程如下: 1. 创建`CategoryDataset`或`PieDataset`对象,填充必要的数据。 2. 使用这些数据集...

    jfreechart生成各种图表

    jfreechart生成各种图表 柱状 饼状 折线 锥状

    Spring+JFreeChart 自动生成统计图

    标题“Spring+JFreeChart 自动生成统计图”涉及的是在Java开发环境中,利用Spring框架和JFreeChart库来动态生成图表的技巧。这篇文章可能是介绍如何在Spring应用中集成JFreeChart,以便为数据可视化提供服务。 ...

    JFreeChart生成图表数据所需的Jar包

    Jar包含:gnujaxp.jar,iText-2.1.5.jar,jcommon-1.0.16.jar,jfreechart-1.0.13.jar,jfreechart-1.0.13-experimental.jar,jfreechart-1.0.13-swt.jar,junit.jar,servlet.jar,swtgraphics2d.jar

    使用 JFreeChart来创建基于web的图表 WORD版

    本文档主要讲述的是使用 JFreeChart来创建基于web的图表;JFreeChart是开放源代码站点SourceForge.net上的一个JAVA项目,它主要用来各种各样的图表,这些图表包括:饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、...

    linux下JFreeChart生成的图片乱码,可以用这个字体

    在Linux环境下,使用Java的JFreeChart库生成图表时,可能会遇到一个问题,即图表中的文本出现乱码。这是因为JFreeChart默认使用的字体可能在Linux系统中不被支持,或者编码设置不正确。解决这个问题的关键在于引入...

    JFreeChart图表生成代码

    这个资源包包含了使用JFreeChart生成图表的代码示例,以及作者的整理笔记,旨在帮助开发者更好地理解和应用JFreeChart。 首先,JFreeChart的核心功能是生成各种类型的图表,如: 1. **饼形图(Pie Chart)**:饼形...

    jfreechart生成图片及导出pdf 、excel

    在这个“jfreechart生成图片及导出pdf、excel”的主题中,我们将深入探讨如何利用JFreeChart来生成这些图表,并将其导出为PDF和Excel格式。 1. **JFreeChart基本使用** JFreeChart库提供了多种图表类型,包括...

    在Java Web中使用JFreechart创建图表信息(主要用于统计方面)

    例如,我们可以使用JDBC从数据库读取数据,填充到`Dataset`中,再用JFreeChart生成图表。 此外,JFreeChart还支持动态更新图表,这对于实时监控或数据分析应用特别有用。通过JavaScript和Ajax,客户端可以定期请求...

    20201012JFreeChart生成饼图和环图技术.zip

    JFreeChart是一款强大的Java图形库,它允许开发者在Java应用程序或网页中生成高质量的图表,包括饼图和环图...结合提供的代码示例和实践,你将能够掌握利用JFreeChart生成图表的关键技术,提升你的Java应用的用户体验。

    JSP使用JFreeChart生成各种图表并生成PDF文档

    在实际应用中,你可能需要根据用户请求动态生成图表和PDF,这可能涉及到数据库查询、业务逻辑处理等步骤。同时,要注意性能优化,避免一次性加载大量数据或创建过多图表导致内存压力。 总结,JSP结合JFreeChart和...

    纯Java动态生成SVG饼图与JFreeChart超强功能生成SVG图表

    纯Java动态生成 SVG 饼图与 JFreeChart 超强功能生成 SVG 图表 在本文中,我们将探讨如何使用 Java 生成 SVG 饼图,并使用 JFreeChart 生成 SVG 图表。我们还将讨论 JFreeChart 的一些缺陷和解决方案。 一、Java ...

    JFreeChart生成图片并显示

    生成图表后,我们可以将其保存为图片文件,或者直接在Web应用中显示。在Web环境中,通常会将图表转换为JPEG或PNG格式的图像流,然后返回给客户端。以下是一个简单的例子,展示了如何将JFreeChart转换为图像流并写入...

Global site tag (gtag.js) - Google Analytics