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柱状图