JFreeChart

 

一、JFreeChart 

可以生成饼图、柱状图的java工具包

星朝博客:jFreeChart利用CategoryDatase,ChartFactory.createBarChart生成的柱状图

jfreechart官网:https://www.jfree.org/jfreechart/

官网的Samples板块有示例jar包,里面包含了示例和JFreeChart的基础包,下载依赖之后可以直接使用,也可以去github下载zip

二、示例

官网的示例

public class BarDemo5
  extends ApplicationFrame
{
  public BarDemo5(String title)
  {
    super(title);
    DefaultCategoryDataset dataset = new DefaultCategoryDataset();
    dataset.addValue(1.0D, "Row 1", "Column 1");
    dataset.addValue(5.0D, "Row 1", "Column 2");
    dataset.addValue(3.0D, "Row 1", "Column 3");
    dataset.addValue(2.0D, "Row 2", "Column 1");
    dataset.addValue(3.0D, "Row 2", "Column 2");
    dataset.addValue(2.0D, "Row 2", "Column 3");
    JFreeChart chart = ChartFactory.createBarChart("Bar Demo 5", "Category", "Value", dataset, PlotOrientation.VERTICAL, true, true, false);
    
    chart.setBackgroundPaint(Color.WHITE);
    CategoryPlot plot = (CategoryPlot)chart.getPlot();
    plot.setBackgroundPaint(Color.LIGHT_GRAY);
    plot.setRangeGridlinePaint(Color.WHITE);
    
    BarRenderer renderer = (BarRenderer)plot.getRenderer();
    renderer.setSeriesPaint(0, Color.gray);
    renderer.setSeriesPaint(1, Color.orange);
    renderer.setDrawBarOutline(false);
    renderer.setItemMargin(0.0D);
    
    CategoryAxis categoryAxis = plot.getDomainAxis();
    categoryAxis.setCategoryMargin(0.0D);
    
    ChartPanel chartPanel = new ChartPanel(chart);
    chartPanel.setPreferredSize(new Dimension(500, 270));
    setContentPane(chartPanel);
  }
  
  public static void main(String[] args)
  {
    BarDemo5 demo = new BarDemo5("Bar Demo 5");
    demo.pack();
    UIUtils.centerFrameOnScreen(demo);
    demo.setVisible(true);
  }
}
/**
     * 创建JFreeChart Bar Chart(柱状图)
     */
    public static void main(String[] args) {
        //步骤1:创建CategoryDataset对象(准备数据)
        CategoryDataset dataset = createDataset();
        //步骤2:根据Dataset 生成JFreeChart对象,以及做相应的设置
        JFreeChart freeChart = createChart(dataset);
        //步骤3:将JFreeChart对象输出到文件,Servlet输出流等
        saveAsFile(freeChart, "D:\\资料\\bar.png", 500, 400);
    }

    // 创建CategoryDataset对象
    public static CategoryDataset createDataset() {

        String []rowKeys = {"One", "Two", "Three"};
        String []colKeys = {"1987", "1997", "2007"};

        double [][] data = {
                {100, 20, 50},
                {20, 10.5, 40},
                {40, 30.0008, 38.24},
        };

        //也可以使用以下代码
        DefaultCategoryDataset categoryDataset = new DefaultCategoryDataset();
        categoryDataset.addValue(688, "小a", "sum");
        categoryDataset.addValue(600, "小b", "sum");
        categoryDataset.addValue(95, "小a", "avg");
        categoryDataset.addValue(80, "小b", "avg");

//        return DatasetUtilities.createCategoryDataset(rowKeys, colKeys, data);
        return categoryDataset;
    }

    //根据CategoryDataset生成JFreeChart对象
    public static JFreeChart createChart(CategoryDataset categoryDataset) {
        JFreeChart jfreechart = ChartFactory.createBarChart("测试表",    //标题
                "ss",    //categoryAxisLabel (category轴,横轴,X轴的标签)
                "aa",    //valueAxisLabel(value轴,纵轴,Y轴的标签)
                categoryDataset, // dataset
                PlotOrientation.VERTICAL,
                true, // legend
                false, // tooltips
                false); // URLs

        Font font = new Font("新宋体", Font.BOLD, 15);

        //设置整个图片的标题字体
        jfreechart.getTitle().setFont(font);

        jfreechart.getLegend().setItemFont(font);

        //以下的设置可以由用户定制,也可以省略
        CategoryPlot  plot = (CategoryPlot) jfreechart.getPlot();
        //背景色 透明度
        plot.setBackgroundAlpha(1f);
        //前景色 透明度
        plot.setForegroundAlpha(1f);
        //其它设置可以参考 CategoryPlot

        return jfreechart;
    }

    //保存为文件
    public static void saveAsFile(JFreeChart chart, String outputPath, int weight, int height) {
        FileOutputStream out = null;
        try {
            File outFile = new File(outputPath);
            if (!outFile.getParentFile().exists()) {
                outFile.getParentFile().mkdirs();
            }
            out = new FileOutputStream(outputPath);
            //保存为PNG文件
            ChartUtilities.writeChartAsPNG(out, chart, weight, height);
            //保存为JPEG文件
            //ChartUtilities.writeChartAsJPEG(out, chart, weight, height);
            out.flush();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (out != null) {
                try {
                    out.close();
                } catch (IOException e) {
                    //do nothing
                }
            }
        }
    }

 

posted @   LoveDonkey  阅读(554)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示