`
sktoo
  • 浏览: 76774 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

jfreechart - (2)PieChart饼图

阅读更多

平面饼状图

生成平面饼状图:

JFreeChart chart = ChartFactory. createPieChart(String title, // 图标题 
                          PieDataset dataset,       // 数据源 
                          boolean legend,         // 是否显示图例 
                          boolean tooltips,         // 是否显示tooltip 
                          boolean urls) ;          // 是否指定url 

 

平面饼状图的Plot对象是PiePlot类型。PiePlot对象没有x轴对象、y轴对象、绘制单元对象,数据源是PieDataset对象。
获取PiePlot对象操作为:

PiePlot plot = (PiePlot) chart.getPlot(); 

 获取数据源:

PieDataset dataset= plot .getDataset(); 

 

饼状图可以接受一切 PieDataset 类型的数据源,下面讲解一下常用的 PieDataset 类型 DefaultPieDataset 的使用方式

//实例化: 
DefaultPieDataset dataset = new DefaultPieDataset(); 
//增加修改操作: 
dataset. setValue(Comparable key, double value); 
//删除操作: 
dataset. remove(Comparable key); 
//查询操作: 
dataset. getKey(int item); 
dataset. getValue(int item); 

 

demo

import java.awt.Color;
import java.awt.Font;
import java.awt.RenderingHints;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.plot.PiePlot;
import org.jfree.data.general.DefaultPieDataset;

public class TestPieChart {

	public static void createPieChart() {
		//用工厂类创建饼图
		JFreeChart pieChart = ChartFactory.createPieChart("台湾偶像剧收视率2008-9-21",
				createDataset(), true, true, false);
		// RenderingHints做文字渲染参数的修改
		// VALUE_TEXT_ANTIALIAS_OFF表示将文字的抗锯齿关闭.
		pieChart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,
				RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
	    //得到饼图的Plot对象
		PiePlot piePlot = (PiePlot) pieChart.getPlot();
		setSection(piePlot);
		setLabel(piePlot);
		setNoDataMessage(piePlot);
		setNullAndZeroValue(piePlot);
                                //将饼图显示在图像界面上
		ChartFrame frame = new ChartFrame("TestPieChart", pieChart);
		frame.pack();
		frame.setVisible(true);
	}

	public static DefaultPieDataset createDataset() {
		//设置数据
		DefaultPieDataset pieDataset = new DefaultPieDataset();
		pieDataset.setValue("篮球火", 2.80);
		pieDataset.setValue("无敌珊宝妹", 3.63);
		pieDataset.setValue("不良笑花", 2.84);
		pieDataset.setValue("黑糖群侠传", null);
		pieDataset.setValue("命中注定我爱你", 0);
		return pieDataset;
	}

	public static void setSection(PiePlot pieplot) {
		//设置扇区颜色
		pieplot.setSectionPaint("篮球火", new Color(160, 160, 255));
		pieplot.setSectionPaint("无敌珊宝妹", new Color(128, 128, 223));
		pieplot.setSectionPaint("不良笑花", new Color(96, 96, 191));
		pieplot.setSectionPaint("命中注定我爱你", new Color(64, 64, 128));
		//设置扇区分离显示
		pieplot.setExplodePercent("篮球火", 0.2D);
		//设置扇区边框不可见
		pieplot.setSectionOutlinesVisible(false);
	}

	public static void setLabel(PiePlot pieplot) {
		//设置扇区标签显示格式:关键字:值(百分比)
		pieplot.setLabelGenerator(new StandardPieSectionLabelGenerator(
				"{0}:{1}({2} percent)"));
		//设置扇区标签颜色
		pieplot.setLabelBackgroundPaint(new Color(220, 220, 220));
		pieplot.setLabelFont((new Font("宋体", Font.PLAIN, 12)));

	}

	public static void setNoDataMessage(PiePlot pieplot) {
		//设置没有数据时显示的信息
		pieplot.setNoDataMessage("无数据");
		//设置没有数据时显示的信息的字体
		pieplot.setNoDataMessageFont(new Font("宋体", Font.BOLD, 14));
		//设置没有数据时显示的信息的颜色
		pieplot.setNoDataMessagePaint(Color.red);
	}

	public static void setNullAndZeroValue(PiePlot piePlot) {
		//设置是否忽略0和null值
		 piePlot.setIgnoreNullValues(true);
		 piePlot.setIgnoreZeroValues(true);
	}

	public static void main(String[] args) {
		createPieChart();
	}

}

 

 效果图

 

3D 饼状图

       对应的工厂方法为 createPieChart3D ,参数与平面饼状图相同。与平面饼状图的差别在于 Plot 对象是PiePlot3D类型

demo

import java.awt.Font;
import java.awt.RenderingHints;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PiePlot3D;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.util.Rotation;

public class TestPieChart3D {

	public static void createPieChart() {
		//通过工程创建3D饼图
		JFreeChart pieChart = ChartFactory.createPieChart3D("台湾偶像剧收视率2008-9-21",
				createDataset(), true, true, false);
		pieChart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,
				RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
		//得到3D饼图的plot对象
		PiePlot3D piePlot = (PiePlot3D) pieChart.getPlot();
		//设置旋转角度
		piePlot.setStartAngle(290);
		//设置旋转方向
		piePlot.setDirection(Rotation.CLOCKWISE);
		//设置透明度
		piePlot.setForegroundAlpha(0.5f);
		piePlot.setLabelFont((new Font("宋体", Font.PLAIN, 12)));

		ChartFrame frame = new ChartFrame("TestPieChart", pieChart);
		frame.pack();
		frame.setVisible(true);

	}
	
	public static DefaultPieDataset createDataset() {
		DefaultPieDataset pieDataset = new DefaultPieDataset();
		pieDataset.setValue("篮球火", 2.80);
		pieDataset.setValue("无敌珊宝妹", 3.63);
		pieDataset.setValue("不良笑花", 2.84);
		return pieDataset;
	}

	public static void main(String[] args) {
		createPieChart();
	}
}

 效果图

分享到:
评论
4 楼 wanxiaotao12 2011-12-26  
中文显显示乱码怎么解决?
3 楼 xwq18 2010-05-05  
太好了,这些我都能直接用上,最近正在做饼形的报表那!
2 楼 unika_ly12 2009-11-16  
请问3D饼图的水平倾斜是哪个方法呢?
1 楼 unika_ly12 2009-11-16  
太好了,网上找了很久,还是你这个详细

相关推荐

Global site tag (gtag.js) - Google Analytics