JavaFX StackedBarChart
JavaFX StackedBarChart组件能够在JavaFX应用程序中绘制堆叠的条形图。这在类似仪表板的应用程序中很有用。 JavaFX StackedBarChart组件由javafx.scene.chart.StackedBarChart类表示。
StackedBarChart组件在函数上与JavaFX BarChart组件相似,但是有一些重要的区别。当我谈到这些差异时,我会强调它们。
StackedBarChart X轴和Y轴
JavaFX StackedBarChart绘制堆积的条形图。堆叠的条形图是二维图,这意味着该图具有X轴和Y轴。对于堆积的条形图,X轴通常是某种类别,Y轴是数字。
例如,假设一个堆积的条形图说明了2014年和2014年台式机,电话和平板电脑用户访问网站的次数。堆积的条形图将显示2条。一栏显示的是2014年台式机,手机和平板电脑的访问量的累积值,另一栏显示的是2014年的累积值。
X轴上的类别为"桌面","电话"和"平板电脑"。 Y轴将显示X轴上每个类别的访问次数,因此Y轴是数字。
我们需要定义StackedBarChart使用的X轴和Y轴。分类轴由JavaFX类javafx.scene.chart.CategoryAxis表示。数字轴由JavaFX类javafx.scene.chart.NumberAxis表示。
这是创建JavaFXCategoryAxis和NumberAxis的示例:
CategoryAxis xAxis = new CategoryAxis();
xAxis.setLabel("Devices");
NumberAxis yAxis = new NumberAxis();
yAxis.setLabel("Visits");
在X轴上设置类别
关于X轴的配置,StackedBarChart与BarChart有一个区别。 " StackedBarChart"要求我们直接在用作X轴的" CategoryAxis"上设置类别。以下示例创建一个X轴,并在X轴上明确设置了类别:
CategoryAxis xAxis = new CategoryAxis();
xAxis.setLabel("Devices");
xAxis.getCategories().addAll("Desktop", "Phone", "Tablet");
创建一个StackedBarChart
要创建一个JavaFX StackedBarChart组件,我们必须创建一个StackedBarChart类的实例。我们必须将X轴和Y轴实例传递给StackedBarChart构造函数。这是一个JavaFXStackedBarChart实例化示例:
CategoryAxis xAxis = new CategoryAxis();
xAxis.setLabel("Devices");
xAxis.getCategories().addAll("Desktop", "Phone", "Tablet");
NumberAxis yAxis = new NumberAxis();
yAxis.setLabel("Visits");
StackedBarChart stackedBarChart = new StackedBarChart(xAxis, yAxis);
StackedBarChart数据系列
为了使JavaFXStackedBarChart组件能够显示任何条形,我们必须为其提供至少一个数据系列。数据系列是数据点的列表。每个数据点包含一个X值和一个Y值。
StackedBarChart与BarChart组件处理数据序列的方式不同。 StackedBarChart将不同数据系列的条形图堆叠在一起,而不是彼此相邻显示。 StackedBarChart将具有相同X类别的所有值堆叠到同一栏中。这意味着在组织数据时与使用" BarChart"时,我们可能不得不有所不同。
要在同一栏中显示来自同一年的台式机,手机和平板电脑的访问量,我们必须为每个设备创建一个数据系列,并将年份用作类别。看起来是这样的:
StackedBarChart stackedBarChart = new StackedBarChart(xAxis, yAxis);
XYChart.Series dataSeries1 = new XYChart.Series();
dataSeries1.setName("Desktop");
dataSeries1.getData().add(new XYChart.Data("2014", 567));
dataSeries1.getData().add(new XYChart.Data("2014", 540));
stackedBarChart.getData().add(dataSeries1);
XYChart.Series dataSeries2 = new XYChart.Series();
dataSeries2.setName("Phone");
dataSeries2.getData().add(new XYChart.Data("2014" , 65));
dataSeries2.getData().add(new XYChart.Data("2014" , 120));
stackedBarChart.getData().add(dataSeries2);
XYChart.Series dataSeries3 = new XYChart.Series();
dataSeries3.setName("Tablet");
dataSeries3.getData().add(new XYChart.Data("2014" , 23));
dataSeries3.getData().add(new XYChart.Data("2014" , 36));
stackedBarChart.getData().add(dataSeries3);
请注意,如何为每种设备类型(台式机,电话,平板电脑)创建一个数据系列,并且按年份对数据进行分类。
将StackedBarChart添加到场景图
为了使" StackedBarChart"可见,必须将其添加到JavaFX场景图中。这意味着将" StackedBarChart"添加到" Scene"对象,或者将" StackedBarChart"添加到添加到" Scene"对象的布局组件。
这是一个向JavaFX场景图添加JavaFXStackedBarChart的示例:
package com.Hyman.javafx.charts;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.chart.*;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class StackedBarChartExperiments extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
primaryStage.setTitle("StackedBarChart Experiments");
CategoryAxis xAxis = new CategoryAxis();
xAxis.setLabel("Devices");
xAxis.getCategories().addAll("Desktop", "Phone", "Tablet");
NumberAxis yAxis = new NumberAxis();
yAxis.setLabel("Visits");
StackedBarChart stackedBarChart = new StackedBarChart(xAxis, yAxis);
XYChart.Series dataSeries1 = new XYChart.Series();
dataSeries1.setName("Desktop");
dataSeries1.getData().add(new XYChart.Data("2014", 567));
dataSeries1.getData().add(new XYChart.Data("2014", 540));
stackedBarChart.getData().add(dataSeries1);
XYChart.Series dataSeries2 = new XYChart.Series();
dataSeries2.setName("Phone");
dataSeries2.getData().add(new XYChart.Data("2014" , 65));
dataSeries2.getData().add(new XYChart.Data("2014" , 120));
stackedBarChart.getData().add(dataSeries2);
XYChart.Series dataSeries3 = new XYChart.Series();
dataSeries3.setName("Tablet");
dataSeries3.getData().add(new XYChart.Data("2014" , 23));
dataSeries3.getData().add(new XYChart.Data("2014" , 36));
stackedBarChart.getData().add(dataSeries3);
VBox vbox = new VBox(stackedBarChart);
Scene scene = new Scene(vbox, 400, 200);
primaryStage.setScene(scene);
primaryStage.setHeight(300);
primaryStage.setWidth(1200);
primaryStage.show();
}
public static void main(String[] args) {
Application.launch(args);
}
}

