报表应用系列——图表JFreeChart: 第3章 饼状图
时间:2010-12-25 BlogJava 临远
3.1. 简单饼图
饼图必须使用DefaultPieDataset为图表提供数据。
DefaultPieDataset dataset = new DefaultPieDataset();
dataset.setValue("Spring Security", 100);
dataset.setValue("jBPM 4", 200);
dataset.setValue("Ext JS", 300);
dataset.setValue("JFreeChart", 100);
这次我们使用setValue向dataset中添加数据,第一个参数是数据的名称,第二个数据是数据的值。
这里就暴露出JFreeChart的一个问题,竟然不能使用统一的dataset接口来设置数据。
下一步通过CharFactory的createPieChart方法创建饼图。
JFreeChart chart = ChartFactory.createPieChart(
"chart", // 标题
dataset, // 数据
true, // 是否使用legend
false, // 是否使用tooltip
false // 是否使用url链接
);
最后使用CharUtilities将JFreeChart导出成图片。
图 3.1. 简单饼图
报表应用系列——图表JFreeChart: 第3章 饼状图(2)
时间:2010-12-25 BlogJava 临远
完整代码如下所示:
DefaultPieDataset dataset = new DefaultPieDataset();
dataset.setValue("Spring Security", 100);
dataset.setValue("jBPM 4", 200);
dataset.setValue("Ext JS", 300);
dataset.setValue("JFreeChart", 100);
JFreeChart chart = ChartFactory.createPieChart("chart", dataset,
true, false, false);
FileOutputStream fos = null;
try {
fos = new FileOutputStream("target/pie1.png");
ChartUtilities.writeChartAsPNG(fos, chart, 400, 300);
} finally {
fos.close();
}
3.2. 炸开的饼图
把饼图中的某一部分提取出来,强调显示。
调用PiePlot中的setExplodePercent方法来实现这一功能。
PiePlot plot = (PiePlot) chart.getPlot();
plot.setExplodePercent("JFreeChart", 0.3);
这里又暴露出一个JFreeChart里的问题,获得Plot也要强制转换成对应的类型才能使用。
图 3.2. 炸开的饼图
3.3. 处理空值和负值
如果设置了值为0或null的值,图表中会显示标签,但是我们看不到数值。
dataset.setValue("null", null);
dataset.setValue("zero", 0);
图 3.3. 空值和负值
如果不希望在图表中显示为空的数据,需要调用PiePlot的两个方法。
plot.setIgnoreZeroValues(true);
plot.setIgnoreNullValues(true);
JFreeChart会一直忽略负值,不需要特殊处理就不会显示在图表中。
报表应用系列——图表JFreeChart: 第3章 饼状图(3)
时间:2010-12-25 BlogJava 临远
3.4. 三维饼图
将createPieChart替换为createPieChart3D就可以实现三维饼图。
图 3.4. 三维饼图
3.5. 多重饼图
要想使用多重饼图,必须先把PieDataset改成CategoryDataset。
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
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, &qu
|