零基础学Struts
上QQ阅读APP看书,第一时间看更新

11.3 JFreeChart生成柱状图

通过JFreeChart可以非常方便地生成柱状图,下面将介绍如何使用JFreeChart生成柱状图并配置柱状图的其他属性。

11.3.1 柱状图

用户还可以使用JFreeChart来生成柱状图。要生成柱状图只需调用ChartFactory的createBarChart()方法。该方法接受8个参数,第一个参数用来设置图表标题,第二个用来设置目录轴(也就是y轴的显示标签),第三个参数用来设置数值轴(也就是x轴的显示标签),第四个参数用来设置数据集,第五个参数用来设置图表的显示方向,第六个参数用来设置是否显示图例,第七个参数用来设置是否生成工具提示,第八个参数用来设置是否生成URL链接。下面来生成一个柱状图,代码如下所示。

        package net.hncu.jfreechart;
        import org.jfree.chart.ChartFactory;
        import org.jfree.chart.ChartFrame;
        import org.jfree.chart.JFreeChart;
        import org.jfree.chart.plot.PlotOrientation;
        import org.jfree.data.category.DefaultCategoryDataset;
        public class TestBarChart {
              public static void main(String[] args) {
                //使用工厂类创建柱状图
                JFreeChart chart = ChartFactory.createBarChart(
                          "学校职称人员统计图",
                          "职称",
                          "人员数量",
                          getDateset(),
                          PlotOrientation.VERTICAL ,
                          false,
                          true,
                          false);
                //创建一个frame来显示图标
                ChartFrame chartFrame = new ChartFrame("学校职称人员统计图", chart);
                chartFrame.pack();
                chartFrame.setVisible(true);
          }
          //返回数据集
          public static DefaultCategoryDataset getDateset() {
                //创建一个数据集
                DefaultCategoryDataset dcd = new DefaultCategoryDataset();
                //设置数据
                dcd.setValue(800, "", "讲师");
                dcd.setValue(400, "", "副教授");
                dcd.setValue(100, "", "教授");
                return dcd;
          }
    }

运行该Java程序可以看到生成的柱状图,如图11.12所示。

图11.12 简单柱状图

11.3.2 复杂柱状图

通过添加数据集,可以生成更加复杂的柱状图。下面添加3所不同学校的不同职称数据,代码如下所示。

        //返回数据集
        public static DefaultCategoryDataset getDateset() {
              //创建一个数据集
              DefaultCategoryDataset dcd = new DefaultCategoryDataset();
              //设置数据
              dcd.setValue(1000, "清华大学", "讲师");
              dcd.setValue(600, "清华大学", "副教授");
              dcd.setValue(500, "清华大学", "教授");
              dcd.setValue(1000, "北京大学", "讲师");
              dcd.setValue(400, "北京大学", "副教授");
              dcd.setValue(300, "北京大学", "教授");
              dcd.setValue(800, "复旦大学", "讲师");
              dcd.setValue(600, "复旦大学", "副教授");
              dcd.setValue(400, "复旦大学", "教授");
              return dcd;
        }

运行该Java程序可以看到生成的复杂柱状图。在该图表中显示了不同学校的不同职称人员,如图11.13所示。

图11.13 复杂柱状图

11.3.3 设置图表中轴的显示标签字体

通过调用JFreeChart实例的getPlot()方法可以获得实际图表实例。通过它的getDomainAxis()方法可以取得其中的横轴,通过它的getRangeAxis()方法可以取得其中的纵轴。通过调用横轴或纵轴的setLabelFont()方法可以设置其显示标签字体。下面设置其横轴和纵轴的标签字体为宋体并加粗,其字体大小为20,代码如下所示。

        //获得图表的Plot对象
        CategoryPlot cPlot = (CategoryPlot) chart.getPlot();
        //取得横轴
        CategoryAxis   cAxis = cPlot.getDomainAxis();
        //设置横轴标签字体
        cAxis.setLabelFont(new Font("宋体", Font.BOLD,30));
        //取得纵轴
        NumberAxis nAxis = (NumberAxis) cPlot.getRangeAxis();
        //设置横轴标签字体
        nAxis.setLabelFont(new Font("宋体", Font.BOLD,30));

运行该Java程序可以看到生成的柱状图中显示标签的字符发生了改变,如图11.14所示。

11.3.4 设置图表中显示标签的字体

还可以通过调用横轴或纵轴中的setTickLabelFont()方法来设置图表中显示标签的字体。下面设置其横轴和纵轴的标签字体为宋体并加粗和倾斜,其字体大小为18,代码如下所示。

        //设置横轴显示标签字体
        cAxis.setTickLabelFont(new Font("宋体", Font.BOLD + Font.ITALIC,24));
        //设置纵轴显示标签字体
        nAxis.setTickLabelFont(new Font("宋体", Font.BOLD + Font.ITALIC,24));

图11.14 设置图表中轴显示标签字体

图11.15 设置图表中显示标签字体(没有对应的文字叙述)

运行该Java程序可以看到生成的柱状图的图标显示标签字体发生改变。

11.3.5 设置横坐标显示标签倾斜

还可以通过调用横轴中的setCategoryLabelPositions()方法来设置图表中横坐标显示标签倾斜。下面设置其横坐标显示标签向下倾斜45˚,代码如下所示。

    //设置分类标签倾斜45˚显示
    cAxis.setCategoryLabelPositions(CategoryLabelPositions.DOWN_45);

运行该Java程序,可以看到生成的柱状图的横坐标显示标签向下倾斜45˚,如图11.16所示。

同样,设置其横坐标显示标签向上倾斜45˚,如图11.17所示,代码如下所示。

    //设置分类标签倾斜45˚显示
    cAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);

图11.16 设置横坐标显示标签向下倾斜45˚

11.3.6 立体柱状图

图11.17 设置横坐标显示标签向上倾斜45˚

通过调用ChartFactory的createBarChart3D ()方法可以创建一幅3D的柱状图,代码如下所示。

    //使用工厂类创建柱状图
    JFreeChart chart = ChartFactory.createBarChart3D(
              "学校职称人员统计图",
              "职称",
              "人员数量",
              getDateset(),
              PlotOrientation.VERTICAL ,
              true,
              true,
              false);

运行该Java程序就可以看到生成的3D柱状图,如图11.18所示。

图11.18 3D柱状图