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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值