平面饼状图
生成平面饼状图:
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();
}
}
效果图