饼形图

PieChart 类以圆形的形式绘制数据,并将其划分为切片。每个切片代表特定值的百分比(部分)。饼图数据包含在 PieChart.Data 对象中。每个 PieChart.Data 对象都有两个字段:饼图片段的名称及其对应的值。

构造函数

要创建饼图,我们需要创建 PieChart 类的对象。我们处理了两个施工人员。其中一个创建一个空图表,除非使用 setData 方法设置数据,否则不会显示任何内容:

PieChart pieChart = new PieChart(); // Creates an empty pie chart

第二个需要传递 PieChart.Data 作为参数。

ObservableList<PieChart.Data> valueList = FXCollections.observableArrayList(
            new PieChart.Data("Cats", 50),
            new PieChart.Data("Dogs", 50));
PieChart pieChart(valueList); // Creates a chart with the given data

数据

饼图切片的值不一定必须总和为 100,因为切片大小将与所有值的总和成比例地计算。

数据条目添加到列表的顺序将决定它们在图表上的位置。默认情况下,它们顺时针放置,但这种行为可以颠倒过来:

pieChart.setClockwise(false);

以下示例创建一个简单的饼图:

import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.chart.PieChart;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;

public class Main extends Application {

@Override
public void start(Stage primaryStage) {
    Pane root = new Pane();
    ObservableList<PieChart.Data> valueList = FXCollections.observableArrayList(
            new PieChart.Data("Android", 55),
            new PieChart.Data("IOS", 33),
            new PieChart.Data("Windows", 12));
    // create a pieChart with valueList data.
    PieChart pieChart = new PieChart(valueList);
    pieChart.setTitle("Popularity of Mobile OS");
    //adding pieChart to the root.
    root.getChildren().addAll(pieChart);
    Scene scene = new Scene(root, 450, 450);

    primaryStage.setTitle("Pie Chart Demo");
    primaryStage.setScene(scene);
    primaryStage.show();
}

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

输出:

StackOverflow 文档

交互式饼图

默认情况下,PieChart 不处理任何事件,但可以更改此行为,因为每个饼图片段都是 JavaFX Node

在下面的示例中,我们初始化数据,将其分配给图表,然后我们迭代数据集,向每个切片添加工具提示,以便通常隐藏的值可以呈现给用户。

ObservableList<PieChart.Data> valueList = FXCollections.observableArrayList(
            new PieChart.Data("Nitrogen", 7809),
            new PieChart.Data("Oxygen", 2195),
            new PieChart.Data("Other", 93));
    
PieChart pieChart = new PieChart(valueList);
pieChart.setTitle("Air composition");

pieChart.getData().forEach(data -> {
    String percentage = String.format("%.2f%%", (data.getPieValue() / 100));
    Tooltip toolTip = new Tooltip(percentage);
    Tooltip.install(data.getNode(), toolTip);
});