当前位置: 首页 > 教程 > JFreeChart >

JFreeChart 饼图

精华
小牛编辑
208浏览
2023-03-14

什么是JFreeChart 饼图

饼图是一个圆形图,它被分成多个扇区,其中每个扇区的面积代表数据的大小。

下图显示了 JFreeChart 库中包含的饼图的一些演示版本:

JFreeChart 饼图的示例

让我们以学生的考试分数分布作为样本数据。

成绩范围 学生人数
80-100 120
60-79 80
40-59 20
20-39 7
0-19 3

以下代码根据上述示例数据创建饼图: 

package cn.xnip;

import javafx.scene.chart.Chart;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.labels.PieSectionLabelGenerator;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.plot.PiePlot;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;

import javax.swing.*;
import java.text.DecimalFormat;

public class PieChartExample extends JFrame {
  private static final long serialVersionUID = 6294689542092367723L;  
  
  public PieChartExample(String title) {  
    super(title);  
  
    // Create dataset  
    PieDataset dataset = createDataset();
  
    // Create chart  
    JFreeChart chart = ChartFactory.createPieChart(
        "Pie Chart Example",  
        dataset,  
        true,   
        true,  
        false);  
  
    //Format Label  
    PieSectionLabelGenerator labelGenerator = new StandardPieSectionLabelGenerator(
        "Marks {0} : ({2})", new DecimalFormat("0"), new DecimalFormat("0%"));
    ((PiePlot) chart.getPlot()).setLabelGenerator(labelGenerator);
      
    // Create Panel  
    ChartPanel panel = new ChartPanel(chart);
    setContentPane(panel);  
  }  
  
  private PieDataset createDataset() {  
  
    DefaultPieDataset dataset=new DefaultPieDataset();
    dataset.setValue("80-100", 120);  
    dataset.setValue("60-79", 80);  
    dataset.setValue("40-59", 20);  
    dataset.setValue("20-39", 7);  
    dataset.setValue("0-19", 3);  
    return dataset;  
  }  
  
  public static void main(String[] args) {  
    SwingUtilities.invokeLater(() -> {  
      PieChartExample example = new PieChartExample("小牛知识库网:PieChart Example");
      example.setSize(800, 400);  
      example.setLocationRelativeTo(null);  
      example.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);  
      example.setVisible(true);  
    });  
  }  
}  

输出结果为: