接上一篇随笔 JFreeChart 生成 柱状图 ,环境及其配置不变,只是将生成柱状图的核心类 CylinderAction 替换成 PieAction,让 PieAction 来负责饼状图的生成,看下代码:
package com.fancy.action;
import java.awt.Color;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.data.general.DefaultPieDataset;
/**
* -----------------------------------------
* @描述 饼状图
* @作者 fancy
* @邮箱 fancydeepin@yeah.net
* @日期 2012-8-7 <p>
* -----------------------------------------
*/
public class PieAction extends BaseAction{
private static final long serialVersionUID = 1L;
private String fileName;
public String execute() throws Exception{
//创建Dataset对象
DefaultPieDataset dataset = new DefaultPieDataset();
//模拟数据
dataset.setValue("E-1区", 50);
dataset.setValue("E-2区", 150);
dataset.setValue("E-3区", 80);
dataset.setValue("E-4区", 140);
dataset.setValue("E-5区", 180);
dataset.setValue("E-6区", 130);
dataset.setValue("E-7区", 100);
//创建3D饼状图
JFreeChart chart = ChartFactory.createPieChart3D("2011年A产品销售量", dataset, true, false, false);
//设置背景颜色
chart.setBackgroundPaint(Color.WHITE);
//保存图表
fileName = ServletUtilities.saveChartAsPNG(chart, 500, 300, null, getHttpSession());
return "pie";
}
public String getFileName() {
return fileName;
}
}
将 cylinder.jsp 拷贝一份名字改成 pie.jsp,其余不变,访问:http://localhost:8080/jfreechart-demo/pie.html 的结果如图示:
从上图可以看出A产品在每个区销售的大概份额,但是默认并没有给显示所占的百分比,下面通过添加代码来使得所占百分比能够显示出来:
package com.fancy.action;
import java.awt.Color;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.plot.PiePlot;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.data.general.DefaultPieDataset;
/**
* -----------------------------------------
* @描述 饼状图
* @作者 fancy
* @邮箱 fancydeepin@yeah.net
* @日期 2012-8-7 <p>
* -----------------------------------------
*/
public class PieAction extends BaseAction{
private static final long serialVersionUID = 1L;
private String fileName;
public String execute() throws Exception{
//创建Dataset对象
DefaultPieDataset dataset = new DefaultPieDataset();
//模拟数据
dataset.setValue("E-1区", 50);
dataset.setValue("E-2区", 150);
dataset.setValue("E-3区", 80);
dataset.setValue("E-4区", 140);
dataset.setValue("E-5区", 180);
dataset.setValue("E-6区", 130);
dataset.setValue("E-7区", 100);
//创建3D饼状图
JFreeChart chart = ChartFactory.createPieChart3D("2011年AA产品销售量", dataset, true, false, false);
//设置背景颜色
chart.setBackgroundPaint(Color.WHITE);
PiePlot plot = (PiePlot)chart.getPlot();
// 图片中显示百分比:自定义方式,{0} 表示选项, {1} 表示数值,{2} 表示所占比例 ,小数点后两位
plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0}={1}({2})", NumberFormat.getNumberInstance(),new DecimalFormat("0.00%")));
//保存图表
fileName = ServletUtilities.saveChartAsPNG(chart, 500, 300, null, getHttpSession());
return "pie";
}
public String getFileName() {
return fileName;
}
}
OK,再次访问的结果如图示:
posted on 2012-08-07 10:29
fancydeepin 阅读(2016)
评论(0) 编辑 收藏