饼形图
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);
}
}
输出:
交互式饼图
默认情况下,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);
});