📅  最后修改于: 2023-12-03 14:51:56.371000             🧑  作者: Mango
JFreeChart 是一个用于生成图表的 Java 库。它支持多种类型的图表,包括条形图、折线图、散点图和饼图等。在本篇文章中,我将会介绍如何在 JFreeChart 的饼图中显示值。
在使用 JFreeChart 之前,需要在项目中导入 JFreeChart 的 jar 包。可以在官网下载最新的版本。
下面是如何使用 JFreeChart 在饼图中显示值的基本步骤:
创建一个 DefaultPieDataset
对象,用于存储饼图的数据。
DefaultPieDataset dataset = new DefaultPieDataset();
向数据集中添加数据。
dataset.setValue("A", 10);
dataset.setValue("B", 20);
dataset.setValue("C", 30);
创建一个 JFreeChart
对象,用于绘制饼图。
JFreeChart chart = ChartFactory.createPieChart("Pie Chart", dataset);
设置饼图中每个区块的标签显示方式。
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));
这些步骤的具体实现将在下面进行详细介绍。
DefaultPieDataset
对象DefaultPieDataset
是 JFreeChart 用于存储饼图数据的默认数据集。可以使用 setValue()
方法向数据集中添加数据。该方法有两个参数,第一个参数是表示数据的名称,第二个参数是表示数据的值。
DefaultPieDataset dataset = new DefaultPieDataset();
dataset.setValue("A", 10);
dataset.setValue("B", 20);
dataset.setValue("C", 30);
JFreeChart
对象可以使用 ChartFactory.createPieChart()
方法创建一个 JFreeChart
对象,并将数据集作为参数传入该方法。
JFreeChart chart = ChartFactory.createPieChart("Pie Chart", dataset);
createPieChart()
方法还有一些可选参数,可以用来自定义饼图的样式和属性。例如,可以通过 legend
参数来控制是否显示图例,通过 toolTips
参数来控制是否显示鼠标提示信息。
JFreeChart chart = ChartFactory.createPieChart(
"Pie Chart", dataset, true, true, false);
默认情况下,饼图中每个区块的标签显示方式并不是很合适。可以使用 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 在饼图中显示值非常简单,只需按照上面的步骤逐一实现即可。在实际应用中,可以根据需要对标签显示方式、颜色等进行调整,以达到更好的效果。