1. 简单柱状图
首先为柱状图准备数据,柱状图必须使用CategoryDataset,这里我们使用DefaultCategoryDataset。
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(100, "Spring Security", "Jan");
dataset.addValue(200, "jBPM 4", "Jan");
dataset.addValue(300, "Ext JS", "Jan");
dataset.addValue(400, "JFreeChart", "Jan");
每调用一次addValue()就会向Dataset中添加一条数据,在图表中看来就是一个柱状矩形,第一个参数100是柱状矩形的长度,第二个参数表示数据的名称,,第三个参数表示数据的分类。
有了图表数据,下一步使用这些数据创建一个柱状图表。
JFreeChart chart = ChartFactory.createBarChart(
"chart", // 标题
"num", // 横轴名称
"type", // 纵轴名称
dataset, // 数据
PlotOrientation.VERTICAL, // 使用垂直柱状图
true, // 是否使用legend
false, // 是否使用tooltip
false // 是否使用url链接
);
最后使用ChartUtilities将chart导出为PNG图片。
FileOutputStream fos = null;
try {
fos = new FileOutputStream("target/bar1.png");
ChartUtilities.writeChartAsPNG(fos, chart, 400, 300);
} finally {
fos.close();
}
图 2.1. 简单柱状图
完整代码如下所示:
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(100, "Spring Security", "Jan");
dataset.addValue(200, "jBPM 4", "Jan");
dataset.addValue(300, "Ext JS", "Jan");
dataset.addValue(400, "JFreeChart", "Jan");
JFreeChart chart = ChartFactory.createBarChart("chart", "num",
"type", dataset, PlotOrientation.VERTICAL, true, false,
false);
FileOutputStream fos = null;
try {
fos = new FileOutputStream("target/bar1.png");
ChartUtilities.writeChartAsPNG(fos, chart, 400, 300);
} finally {
fos.close();
}
2. 水平柱状图
把PlotOrientation.VERTICAL改成PlotOrientation.HORIZONTAL,柱状图就从竖直的变成了水平的。
图 2.2. 水平柱状图
3. 三维柱状图
使用createBarChart3D就会生成三维柱状图。
图 2.3. 三维柱状图
4. 分组柱状图
DefaultCategoryDataset支持分组统计,我们只需要在addValue()时为数据指定分组类型,显示柱状图时会自动根据类别分组显示。
dataset.addValue(100, "Spring Security", "Jan");
dataset.addValue(200, "jBPM 4", "Jan");
dataset.addValue(300, "Ext JS", "Jan");
dataset.addValue(100, "JFreeChart", "Jan");
dataset.addValue(60, "Spring Security", "Fer");
dataset.addValue(100, "jBPM 4", "Fer");
dataset.addValue(340, "Ext JS", "Fer");
dataset.addValue(130, "JFreeChart", "Fer");
图 2.4. 分组柱状图
5. 负向坐标
为dataset添加一个负值,就可以在图标上显示出负向坐标了。
dataset.addValue(-20, "Ext JS", "Jan");