jfreechart生成Multiple Pie Chart

来源:互联网 发布:qq群淘宝客优惠劵软件 编辑:程序博客网 时间:2024/04/30 05:01

作为java web报表开发中的一把利器,如今网上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。只是名字变了。


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

      }

      
      
// 获取JFreeChart对象
    JFreeChart chart = ChartFactory.createMultiplePieChart (
    
       chartTitle,                    
// 图表标题
       dataset,               // 数据集
       TableOrder.BY_COLUMN,  // 指定被提取数据的顺序
       false,                 // 是否包含图例
       true,                  // 是否包含提示工具
       false                  // 是否包含url
    );


        
// 创建图像
        int width = 800, height = 600;    
    
    
// 获取PiePlot对象
    MultiplePiePlot multiPlot = (MultiplePiePlot) chart.getPlot();
    JFreeChart obj 
= multiPlot.getPieChart();
    PiePlot plot 
= (PiePlot) obj.getPlot();
    
    
// 设置标签格式
    plot.setLabelGenerator(new StandardPieItemLabelGenerator("{0} = {1} ({2})", NumberFormat.getNumberInstance(),
                    
new DecimalFormat("0.00%")));
      
      
// 分离圆弧
      for (int i = 0; i < week.length; i++)
        
{
                plot.setExplodePercent(i, 
0.05);
        }

        
        ChartRenderingInfo info 
= new ChartRenderingInfo(new StandardEntityCollection());

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


原创粉丝点击