使用JFreeChart生成条形图

来源:互联网 发布:自信过头就是自负知乎 编辑:程序博客网 时间:2024/05/14 03:11

1. 准备工作

  • 下载JFreeChart,我使用的版本为1.0.19,相关内容参见JFreeChart,下载链接为https://sourceforge.net/projects/jfreechart/files/。
  • 导入jar包,本例子使用jcommon-1.0.23.jarjfreechart-1.0.19.jar,所以只需要导入这两个包即可。在java项目下新建目录lib,将上述两个包复制到该目录下,然后在Eclipse下选中这两个包,右键单击选中Build Path菜单项,接着单击Add to Build Path子项添加jar包到该项目中。

2. 实例

数据如下:
这里写图片描述

完整代码如下:

//CreateImage.javapackage jfreechart_test;import java.awt.Font;import java.io.File;import java.io.IOException;import org.jfree.chart.ChartColor;import org.jfree.chart.ChartFactory;import org.jfree.chart.ChartUtilities;import org.jfree.chart.JFreeChart;import org.jfree.chart.StandardChartTheme;import org.jfree.chart.axis.CategoryAxis;import org.jfree.chart.axis.CategoryLabelPositions;import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;import org.jfree.chart.plot.CategoryPlot;import org.jfree.chart.plot.PlotOrientation;import org.jfree.chart.renderer.category.BarRenderer;import org.jfree.chart.renderer.category.StandardBarPainter;import org.jfree.data.category.DefaultCategoryDataset;public class CreateImage {    public static void createImage() {        final DefaultCategoryDataset dataset = new DefaultCategoryDataset();        dataset.addValue(26, "参考值", "MMSE");        dataset.addValue(4, "参考值", "言语记忆N5");        dataset.addValue(29, "参考值", "注意功能");        dataset.addValue(30, "参考值", "言语流畅性");        dataset.addValue(22, "参考值", "命名测验");        dataset.addValue(38, "参考值", "执行功能");        dataset.addValue(28, "测量值", "MMSE");        dataset.addValue(4, "测量值", "言语记忆N5");        dataset.addValue(30, "测量值", "注意功能");        dataset.addValue(46, "测量值", "言语流畅性");        dataset.addValue(24, "测量值", "命名测验");        dataset.addValue(48, "测量值", "执行功能");        // 创建主题样式        StandardChartTheme standardChartTheme = new StandardChartTheme("CN");        // 设置标题字体        standardChartTheme.setExtraLargeFont(new Font("隶书", Font.BOLD, 15));        // 设置图例的字体        standardChartTheme.setRegularFont(new Font("宋书", Font.PLAIN, 12));        // 设置轴向的字体        standardChartTheme.setLargeFont(new Font("宋书", Font.PLAIN, 12));        // 应用主题样式        ChartFactory.setChartTheme(standardChartTheme);        JFreeChart barChart = ChartFactory.createBarChart("认知能力得分", null, null, dataset,                PlotOrientation.VERTICAL, true, true, false);        //图表背景色        barChart.setBackgroundPaint(ChartColor.WHITE);        CategoryPlot categoryplot = (CategoryPlot) barChart.getPlot();        categoryplot.setBackgroundPaint(ChartColor.WHITE);        //柱图的呈现器        BarRenderer renderer = new BarRenderer();        renderer.setBarPainter(new StandardBarPainter());//取消渐变效果        renderer.setIncludeBaseInRange(true); // 显示每个柱的数值,并修改该数值的字体属性        renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());        renderer.setBaseOutlinePaint(ChartColor.BLACK); // 设置柱子边框颜色        renderer.setDrawBarOutline(true); // 设置柱子边框可见        renderer.setItemMargin(0.05); // 组内柱子间隔为组宽的10%        renderer.setMaximumBarWidth(0.05);// 设置条形柱最大宽度        renderer.setBaseItemLabelsVisible(true, true);        renderer.setShadowVisible(false);//不显示阴影        categoryplot.setRenderer(renderer); // 给柱图添加呈现器        //修改x轴标签方向        CategoryAxis categoryaxis = barChart.getCategoryPlot().getDomainAxis();        categoryaxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);        int width = 500; //图像宽度        int height = 380; //图像高度        File BarChart = new File("d:\\test.png");        try {            ChartUtilities.saveChartAsJPEG(BarChart, barChart, width, height);        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }}//CreateImageIns.javapackage jfreechart_test;public class CreateImageIns {    public static void main(String[] args) {        CreateImage.createImage();    }}

结果展示:
这里写图片描述

3. 其他

1. 改变柱子颜色

renderer.setSeriesPaint(i, ChartColor.WHITE);//将第i个柱子设置为白色

在上述CreateImage.java的createImage()方法中的柱图呈现器下面添加如下代码:

//设置柱子颜色for(int i = 0; i < 12; i++) {    if(i % 2 == 0) {        renderer.setSeriesPaint(i, ChartColor.GRAY);    } else {        renderer.setSeriesPaint(i, ChartColor.WHITE);    }}       

结果为:
这里写图片描述

0 0
原创粉丝点击