JavaFX StackedBarChart

时间:2020-01-09 10:36:41  来源:igfitidea点击:

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表示。

这是创建JavaFXCategoryAxisNumberAxis的示例:

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