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); } }