📜  如何使用 jfreechart 在饼图中显示值 (1)

📅  最后修改于: 2023-12-03 14:51:56.371000             🧑  作者: Mango

如何使用 JFreeChart 在饼图中显示值

JFreeChart 是一个用于生成图表的 Java 库。它支持多种类型的图表,包括条形图、折线图、散点图和饼图等。在本篇文章中,我将会介绍如何在 JFreeChart 的饼图中显示值。

准备工作

在使用 JFreeChart 之前,需要在项目中导入 JFreeChart 的 jar 包。可以在官网下载最新的版本。

基本步骤

下面是如何使用 JFreeChart 在饼图中显示值的基本步骤:

  1. 创建一个 DefaultPieDataset 对象,用于存储饼图的数据。

    DefaultPieDataset dataset = new DefaultPieDataset();
    
  2. 向数据集中添加数据。

    dataset.setValue("A", 10);
    dataset.setValue("B", 20);
    dataset.setValue("C", 30);
    
  3. 创建一个 JFreeChart 对象,用于绘制饼图。

    JFreeChart chart = ChartFactory.createPieChart("Pie Chart", dataset);
    
  4. 设置饼图中每个区块的标签显示方式。

    PiePlot plot = (PiePlot) chart.getPlot();
    
    plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0} ({1})"));
    plot.setLabelBackgroundPaint(Color.WHITE);
    plot.setLabelOutlinePaint(null);
    plot.setLabelShadowPaint(null);
    plot.setLabelFont(new Font("SansSerif", Font.PLAIN, 12));
    

这些步骤的具体实现将在下面进行详细介绍。

实现步骤
1. 创建一个 DefaultPieDataset 对象

DefaultPieDataset 是 JFreeChart 用于存储饼图数据的默认数据集。可以使用 setValue() 方法向数据集中添加数据。该方法有两个参数,第一个参数是表示数据的名称,第二个参数是表示数据的值。

DefaultPieDataset dataset = new DefaultPieDataset();
dataset.setValue("A", 10);
dataset.setValue("B", 20);
dataset.setValue("C", 30);
2. 创建一个 JFreeChart 对象

可以使用 ChartFactory.createPieChart() 方法创建一个 JFreeChart 对象,并将数据集作为参数传入该方法。

JFreeChart chart = ChartFactory.createPieChart("Pie Chart", dataset);

createPieChart() 方法还有一些可选参数,可以用来自定义饼图的样式和属性。例如,可以通过 legend 参数来控制是否显示图例,通过 toolTips 参数来控制是否显示鼠标提示信息。

JFreeChart chart = ChartFactory.createPieChart(
    "Pie Chart", dataset, true, true, false);
3. 设置饼图中每个区块的标签显示方式

默认情况下,饼图中每个区块的标签显示方式并不是很合适。可以使用 PiePlot 类的一些方法来修改标签的显示方式。

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

plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0} ({1})"));
plot.setLabelBackgroundPaint(Color.WHITE);
plot.setLabelOutlinePaint(null);
plot.setLabelShadowPaint(null);
plot.setLabelFont(new Font("SansSerif", Font.PLAIN, 12));

setLabelGenerator() 方法用于设置标签内容的生成方式。这里使用了 StandardPieSectionLabelGenerator 类,它可以生成类似于 "A (10%)" 的标签内容。{0} 表示数据名称,{1} 表示数据所占比例。

setLabelBackgroundPaint() 方法用于设置标签背景的颜色。这里将其设置成白色。

setLabelOutlinePaint() 方法用于设置标签边框的颜色。这里将其设置为 null,表示不显示边框。

setLabelShadowPaint() 方法用于设置标签阴影的颜色。这里将其设置为 null,表示不显示阴影。

setLabelFont() 方法用于设置标签的字体。这里将其设置为 SansSerif,并且字体大小为 12。

完整代码

下面是一个完整的示例代码,展示了如何使用 JFreeChart 在饼图中显示值。

import java.awt.Color;
import java.awt.Font;
import javax.swing.JFrame;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PiePlot;
import org.jfree.chart.title.LegendTitle;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.ui.RectangleInsets;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;

public class PieChartExample extends JFrame {

    public PieChartExample() {
        DefaultPieDataset dataset = new DefaultPieDataset();
        dataset.setValue("A", 10);
        dataset.setValue("B", 20);
        dataset.setValue("C", 30);

        JFreeChart chart = ChartFactory.createPieChart(
            "Pie Chart",  // chart title
            dataset,      // data
            true,         // include legend
            true,         // create tooltips
            false         // do not generate URLs
        );

        chart.setBackgroundPaint(Color.white);

        LegendTitle legend = chart.getLegend();
        legend.setFrame(BlockBorder.NONE);
        legend.setPosition(RectangleEdge.RIGHT);

        PiePlot plot = (PiePlot) chart.getPlot();
        plot.setBackgroundPaint(Color.white);
        plot.setOutlinePaint(null);
        plot.setInsets(new RectangleInsets(0, 0, 0, 0));
        plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0} ({1})"));
        plot.setLabelBackgroundPaint(Color.white);
        plot.setLabelOutlinePaint(null);
        plot.setLabelShadowPaint(null);
        plot.setLabelFont(new Font("SansSerif", Font.PLAIN, 12));

        ChartPanel chartPanel = new ChartPanel(chart, false);
        chartPanel.setPreferredSize(new Dimension(500, 300));
        setContentPane(chartPanel);
    }

    public static void main(String[] args) {
        PieChartExample demo = new PieChartExample();
        demo.pack();
        RefineryUtilities.centerFrameOnScreen(demo);
        demo.setVisible(true);
    }
}
总结

使用 JFreeChart 在饼图中显示值非常简单,只需按照上面的步骤逐一实现即可。在实际应用中,可以根据需要对标签显示方式、颜色等进行调整,以达到更好的效果。