jfreechart生成Multiple Pie Chart

作为java web报表开发中的一把利器,如今网上jfreechart的文章有很多,但是没有介绍如何生成Multiple Pie Chart这种类型的饼图。我来填补这个空白把 ^ ^

jfreechart生成Multiple Pie Chart


源程序是基于Servlet / JSP的,jfreechart的版本是0.9.21。下面是需要说明的几点:

1、工厂类的createMultiplePieChart方法中的第二个参数类型为CategoryDataset。 由于这是个接口,我们在构建数据集时用实现此接口的DefaultCategoryDataset就可以了。注意不要用PieDataset来创建数据 集。

2、createMultiplePieChart方法中的第三个参数类型为org.jfree.util.TableOrder,取值TableOrder.BY_ROW和TableOrder.BY_COLUMN。具体作用大家试一下就明白了。

3、 如果要自定义饼图中的各个属性,在获取plot对象时要注意类型为MultiplePiePlot。先用getPieChart获取一个 JFreeChart对象,之后就可以用getPlot方法获取PiePlot类型。之后就可以用各种setter方法自定义设置了,由于数据集是 category,所以setter方法的范围是all or none。

4、最新版本中(1.0.3)设置标签格式的setLabelGenerator方法的参数由StandardPieItemLabelGenerator变为PieSectionLabelGenerator。只是名字变了。

jfreechart生成Multiple Pie Chart
jfreechart生成Multiple Pie Chart
<%@ page language="java" contentType="image/png;charset=GB2312"
jfreechart生成Multiple Pie Chart    
import="java.text.*"
jfreechart生成Multiple Pie Chart    
import="org.jfree.chart.*"
jfreechart生成Multiple Pie Chart    
import="org.jfree.chart.servlet.*"
jfreechart生成Multiple Pie Chart    
import="org.jfree.chart.plot.*"
jfreechart生成Multiple Pie Chart    
import="org.jfree.chart.labels.StandardPieItemLabelGenerator"
jfreechart生成Multiple Pie Chart    
import="org.jfree.chart.entity.*"
jfreechart生成Multiple Pie Chart    
import="org.jfree.data.category.*"
jfreechart生成Multiple Pie Chart    
import="org.jfree.util.*"
jfreechart生成Multiple Pie Chart
%>
jfreechart生成Multiple Pie Chart
<%
jfreechart生成Multiple Pie Chartjfreechart生成Multiple Pie Chart    String bookType[] 
= ...{"社科类""文学类""体育类""少儿类"};
jfreechart生成Multiple Pie Chartjfreechart生成Multiple Pie Chart      String week[] 
= ...{"第1周""第2周""第3周""第4周"};
jfreechart生成Multiple Pie Chart      String chartTitle 
= "各周图书销量";
jfreechart生成Multiple Pie Chart      
jfreechart生成Multiple Pie Chart       
// 创建数据集
jfreechart生成Multiple Pie Chart
    DefaultCategoryDataset dataset = new DefaultCategoryDataset();
jfreechart生成Multiple Pie Chart    
jfreechart生成Multiple Pie Chart    
// 构建数据
jfreechart生成Multiple Pie Chart
      int bookSales;
jfreechart生成Multiple Pie Chartjfreechart生成Multiple Pie Chart      
for (int i = 0; i < bookType.length; i++...{
jfreechart生成Multiple Pie Chartjfreechart生成Multiple Pie Chart          
for (int j =0 ; j < week.length; j++...{
jfreechart生成Multiple Pie Chart               bookSales 
= 1 + (int)(Math.random() * 1000);
jfreechart生成Multiple Pie Chart               dataset.addValue(bookSales, bookType[i], week[j]);
jfreechart生成Multiple Pie Chart          }

jfreechart生成Multiple Pie Chart      }

jfreechart生成Multiple Pie Chart      
jfreechart生成Multiple Pie Chart      
// 获取JFreeChart对象
jfreechart生成Multiple Pie Chart
    JFreeChart chart = ChartFactory.createMultiplePieChart (
jfreechart生成Multiple Pie Chart    
jfreechart生成Multiple Pie Chart       chartTitle,                    
// 图表标题
jfreechart生成Multiple Pie Chart
       dataset,               // 数据集
jfreechart生成Multiple Pie Chart
       TableOrder.BY_COLUMN,  // 指定被提取数据的顺序
jfreechart生成Multiple Pie Chart
       false,                 // 是否包含图例
jfreechart生成Multiple Pie Chart
       true,                  // 是否包含提示工具
jfreechart生成Multiple Pie Chart
       false                  // 是否包含url
jfreechart生成Multiple Pie Chart
    );
jfreechart生成Multiple Pie Chart
jfreechart生成Multiple Pie Chart
jfreechart生成Multiple Pie Chart        
// 创建图像
jfreechart生成Multiple Pie Chart
        int width = 800, height = 600;    
jfreechart生成Multiple Pie Chart    
jfreechart生成Multiple Pie Chart    
// 获取PiePlot对象
jfreechart生成Multiple Pie Chart
    MultiplePiePlot multiPlot = (MultiplePiePlot) chart.getPlot();
jfreechart生成Multiple Pie Chart    JFreeChart obj 
= multiPlot.getPieChart();
jfreechart生成Multiple Pie Chart    PiePlot plot 
= (PiePlot) obj.getPlot();
jfreechart生成Multiple Pie Chart    
jfreechart生成Multiple Pie Chart    
// 设置标签格式
jfreechart生成Multiple Pie Chart
    plot.setLabelGenerator(new StandardPieItemLabelGenerator("{0} = {1} ({2})", NumberFormat.getNumberInstance(),
jfreechart生成Multiple Pie Chart                    
new DecimalFormat("0.00%")));
jfreechart生成Multiple Pie Chart      
jfreechart生成Multiple Pie Chart      
// 分离圆弧
jfreechart生成Multiple Pie Chart
      for (int i = 0; i < week.length; i++)
jfreechart生成Multiple Pie Chartjfreechart生成Multiple Pie Chart        
...{
jfreechart生成Multiple Pie Chart                plot.setExplodePercent(i, 
0.05);
jfreechart生成Multiple Pie Chart        }

jfreechart生成Multiple Pie Chart        
jfreechart生成Multiple Pie Chart        ChartRenderingInfo info 
= new ChartRenderingInfo(new StandardEntityCollection());
jfreechart生成Multiple Pie Chart
jfreechart生成Multiple Pie Chart        
// 设置图片生成格式
jfreechart生成Multiple Pie Chart
    String fileName = ServletUtilities.saveChartAsPNG(chart, width, height, info, session);
jfreechart生成Multiple Pie Chart    
jfreechart生成Multiple Pie Chart    
// 设置图片生成路径
jfreechart生成Multiple Pie Chart
        String graphURL = request.getContextPath() + "/servlet/org.jfree.chart.servlet.DisplayChart?filename=" + fileName; 
jfreechart生成Multiple Pie Chart
%>
jfreechart生成Multiple Pie Chart
<html>
jfreechart生成Multiple Pie Chart    
<head>
jfreechart生成Multiple Pie Chart       
<title><%= chartTitle %></title>
jfreechart生成Multiple Pie Chart  
</head>
jfreechart生成Multiple Pie Chart  
<body>
jfreechart生成Multiple Pie Chart      
<p align="center">
jfreechart生成Multiple Pie Chart          
<img src="<%= graphURL %>" border="1" />
jfreechart生成Multiple Pie Chart    
</p>
jfreechart生成Multiple Pie Chart  
</body>
jfreechart生成Multiple Pie Chart
</html>