报表应用系列——图表JFreeChart:饼状图

来源:互联网 发布:硬盘阵列数据恢复 编辑:程序博客网 时间:2024/04/26 05:54

3.1. 简单饼图
  饼图必须使用DefaultPieDataset为图表提供数据。
 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. 简单饼图

  完整代码如下所示:

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会一直忽略负值,不需要特殊处理就不会显示在图表中。

  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, "Ext JS", "Fer"); 
dataset.addValue(130, "JFreeChart", "Fer"); 

  第二步,使用createMultiplePieChart生成多重报表。

JFreeChart chart = ChartFactory.createMultiplePieChart( 
  "chart", 
  dataset, 
  TableOrder.BY_COLUMN, // 按列分割饼图,addValue中的第三个参数 
  true, 
  false, 
  false 
); 

  图 3.5. 多重报表

  TODO:

  color

  outlines

  label