jfreechart生成Multiple Pie Chart

作为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 >


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值