天天看点

java jfreechart绘制柱状图

实例:

public class DrawColumnHistogram {

 public String draw(String path,double[] d1) {

        CategoryDataset dataset = createDataset(d1);

        JFreeChart chart = ChartFactory.createBarChart(

                                                "ACF图", // 图表标题

                                                "", // 目录轴的显示标签

                                                "平稳度", // 数值轴的显示标签

                                                dataset, // 数据集

                                                PlotOrientation.VERTICAL, // 图表方向:水平、垂直

                                                true,  // 是否显示图例(对于简单的柱状图必须是false)

                                                true,  // 是否生成工具

                                                true  // 是否生成URL链接

                                                );

        CategoryPlot plot = chart.getCategoryPlot();//获得图表区域对象

        //设置图表的纵轴和横轴org.jfree.chart.axis.CategoryAxis

        org.jfree.chart.axis.CategoryAxis domainAxis = plot.getDomainAxis();

        domainAxis.setLowerMargin(0.1);//设置距离图片左端距离此时为10%

        domainAxis.setUpperMargin(0.1);//设置距离图片右端距离此时为百分之10

        domainAxis.setCategoryLabelPositionOffset(10);//图表横轴与标签的距离(10像素)

        domainAxis.setCategoryMargin(0.2);//横轴标签之间的距离20%

        //domainAxis.setMaximumCategoryLabelLines(1);

        //domainAxis.setMaximumCategoryLabelWidthRatio(0);

        //设定柱子的属性

        org.jfree.chart.axis.ValueAxis rangeAxis = plot.getRangeAxis();

        rangeAxis.setUpperMargin(0.1);//设置最高的一个柱与图片顶端的距离(最高柱的10%)

        //设置图表的颜色

        org.jfree.chart.renderer.category.BarRenderer3D renderer;

        renderer = new org.jfree.chart.renderer.category.BarRenderer3D();

        renderer.setBaseOutlinePaint(Color.red);

        renderer.setSeriesPaint(0, new Color(0, 255, 255));//计划柱子的颜色为青色

        renderer.setSeriesOutlinePaint(0,Color.BLACK);//边框为黑色

        renderer.setSeriesPaint(1, new Color(0, 255, 0));//实报柱子的颜色为绿色

        renderer.setSeriesOutlinePaint(1,Color.red);//边框为红色

        renderer.setItemMargin(0.5);//组内柱子间隔为组宽的10%

        //显示每个柱的数值,并修改该数值的字体属性

        renderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());

        renderer.setItemLabelFont(new Font("黑体",Font.BOLD,12));//12号黑体加粗

        renderer.setItemLabelPaint(Color.black);//字体为黑色

        renderer.setItemLabelsVisible(true);

        plot.setRenderer(renderer);//使用我们设计的效果

        //设置纵横坐标的显示位置

        plot.setDomainAxisLocation(AxisLocation.BOTTOM_OR_LEFT);//学校显示在下端(柱子竖直)或左侧(柱子水平)

        plot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_LEFT); //人数显示在下端(柱子水平)或左侧(柱子竖直)

        //解决中文乱码问题

        CategoryPlot categoryplot = (CategoryPlot) chart.getPlot();   

        NumberAxis numberaxis = (NumberAxis) categoryplot.getRangeAxis();     

        CategoryAxis domainAxis1 = categoryplot.getDomainAxis();     

        TextTitle textTitle = chart.getTitle();    

        textTitle.setFont(new Font("黑体", Font.PLAIN, 20));               

        domainAxis1.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 11));                 

        domainAxis1.setLabelFont(new Font("宋体", Font.PLAIN, 12));               

        numberaxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 12));             

        numberaxis.setLabelFont(new Font("黑体", Font.PLAIN, 12));                 

        chart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12)); 

  //把图片写入指定路径,生成图片

  FileOutputStream fos_jpg = null;

  try {

   String imagePath = path+"\\fruit4.jpeg";

   fos_jpg = new FileOutputStream(path+"\\fruit4.jpeg");

   ChartUtilities

     .writeChartAsJPEG(fos_jpg,chart,400,300);

  } catch (Exception e) {

  } finally {

   try {

    fos_jpg.close();

   } catch (Exception e) {

   }

  }

  // 返回图片浏览路径

  return null;

 }   

     private CategoryDataset createDataset(double[] d1) {    

         final double[][] data = new double[][] {   

           d1 

         };   

         return DatasetUtilities.createCategoryDataset("Series ", "Factor ", data);   

     } 

}

jfreechart的jar包: