JavaFX 提供了哪些不同的 XY 圖表?


javafx.scene.chart 包提供了建立各種圖表的類,例如:折線圖、面積圖、條形圖、餅圖、氣泡圖、散點圖等。

所有這些圖表都屬於 javafx.scene.chart 包。名為 Chart 的類是 JavaFX 中所有圖表的基類,而 XYChart 是所有在 XY 平面繪製的圖表的基類。

建立 XY 圖表時,您需要:

  • 建立 X 軸和 Y 軸。

  • 在這些軸上建立資料點。

  • 使用資料點建立序列。

  • 將序列新增到圖表中。

定義軸

一般來說,圖表的軸可以用以下表示:

  • 數字,例如人口、年齡。

  • 類別,例如一週中的日期、國家/地區。

在 JavaFX 中,您可以透過例項化 javafx.scene.chart.NumberAxis 類建立數字軸,並透過例項化 javafx.scene.chart.CategoryAxis 類建立類別軸。

下圖顯示了 JavaFX 中軸的類層次結構:

將資料傳遞到 XY 圖表

要在 XY 圖表中繪製一組點,我們需要指定一系列 XY 座標。

XYChart.Series 表示資料項的序列。使用此類可以將資料傳送到圖表。

XYChart.Data 表示 XY 平面中的特定資料點。要建立點,您需要透過傳遞該點的 X 和 Y 值來例項化此類。

因此,要為線條建立資料:

  • 透過例項化 XYChart.Data 類建立所需數量的點。

  • 透過例項化 XYChart.Series 類建立序列。

  • 使用 getData() 方法獲取 XYChart.Series 類的可觀察列表。

  • 使用 add()addAll() 方法將建立的資料點新增到列表中。

  • 將建立的資料序列新增到折線圖中,如下所示:

linechart.getData().add(series);

示例

以下 JavaFX 示例演示了所有 XY 圖表的建立。

import javafx.application.Application;
import javafx.geometry.Side;
import javafx.scene.Scene;
import javafx.scene.chart.AreaChart;
import javafx.scene.chart.BarChart;
import javafx.scene.chart.BubbleChart;
import javafx.scene.chart.CategoryAxis;
import javafx.scene.chart.LineChart;
import javafx.stage.Stage;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.ScatterChart;
import javafx.scene.chart.XYChart;
import javafx.scene.layout.FlowPane;
public class XYChartsExample extends Application {
   public void start(Stage stage) {
      //Creating an area chart
      CategoryAxis xAxis = new CategoryAxis();
      NumberAxis yAxis = new NumberAxis();
      xAxis.setLabel("Months");
      yAxis.setLabel("Rainfall (mm)");
      AreaChart areaChart = new AreaChart(xAxis, yAxis);
      XYChart.Series series = new XYChart.Series();
      series.getData().add(new XYChart.Data("July", 169.9));
      series.getData().add(new XYChart.Data("Aug", 178.7));
      series.getData().add(new XYChart.Data("Sep", 158.3));
      series.getData().add(new XYChart.Data("Oct", 97.2));
      series.getData().add(new XYChart.Data("Nov", 22.4));
      series.getData().add(new XYChart.Data("Dec", 5.9));
      series.setName("Rainfall In Hyderabad");
      //Setting data to the area chart
      areaChart.getData().addAll(series);
      areaChart.setPrefSize(200, 200);
      //Creating the Bar chart
      CategoryAxis xAxis1 = new CategoryAxis();
      xAxis1.setLabel("Year");
      NumberAxis yAxis1 = new NumberAxis();
      yAxis1.setLabel("Population (In millions)");
      BarChart barchart = new BarChart(xAxis1, yAxis1);
      XYChart.Series<String, Number> series1 = new XYChart.Series<>();
      series1.setName("Asia");
      series1.getData().add(new XYChart.Data<>("2012", 900));
      series1.getData().add(new XYChart.Data<>("2013", 1000));
      series1.getData().add(new XYChart.Data<>("2014", 1170));
      series1.getData().add(new XYChart.Data<>("2015", 1250));
      series1.getData().add(new XYChart.Data<>("2016", 1530));
      series1.setName("Population of Asia");
      barchart.getData().addAll(series1);
      barchart.setPrefSize(200, 200);
      //Creating a bubble chart
      NumberAxis xAxis2 = new NumberAxis(0, 100, 10);
      NumberAxis yAxis2 = new NumberAxis(20, 100, 10);
      xAxis2.setLabel("Age");
      yAxis2.setLabel("Weight");
      BubbleChart bubbleChart = new BubbleChart(xAxis2, yAxis2);
      XYChart.Series series2 = new XYChart.Series();
      series2.getData().add(new XYChart.Data(10, 30, 4));
      series2.getData().add(new XYChart.Data(25, 40, 5));
      series2.getData().add(new XYChart.Data(40, 50, 6));
      series2.getData().add(new XYChart.Data(55, 60, 8));
      series2.getData().add(new XYChart.Data(70, 70, 9));
      bubbleChart.getData().add(series2);
      series2.setName("work");
      bubbleChart.setPrefSize(200, 200);
      //Creating a line chart
      NumberAxis xAxis3 = new NumberAxis();
      NumberAxis yAxis3 = new NumberAxis();
      //Setting labels for the axes
      xAxis3.setLabel("Months");
      yAxis3.setLabel("Rainfall (mm)");
      LineChart linechart = new LineChart(xAxis3, yAxis3);
      XYChart.Series series3 = new XYChart.Series();
      series3.getData().add(new XYChart.Data(1, 13.2));
      series3.getData().add(new XYChart.Data(2, 7.9));
      series3.getData().add(new XYChart.Data(3, 15.3));
      series3.getData().add(new XYChart.Data(4, 20.2));
      series3.getData().add(new XYChart.Data(5, 35.7));
      series3.getData().add(new XYChart.Data(6, 103.8));
      series3.setName("Rainfall In Hyderabad");
      //Setting the data to Line chart
      linechart.getData().add(series3);
      linechart.setPrefSize(200, 200);
      //Creating a scatter chart
      NumberAxis xAxis4 = new NumberAxis(10, 26, 2);
      NumberAxis yAxis4 = new NumberAxis(0, 700, 100);
      xAxis4.setLabel("Temperature °C");
      yAxis4.setLabel("Ice Cream Sales in (USD)");
      ScatterChart scatterChart = new ScatterChart(xAxis4, yAxis4);
      XYChart.Series series4 = new XYChart.Series();
      series4.getData().add(new XYChart.Data(14.2, 215));
      series4.getData().add(new XYChart.Data(16.4, 325));
      series4.getData().add(new XYChart.Data(11.9, 185));
      series4.getData().add(new XYChart.Data(19.4, 412));
      series4.getData().add(new XYChart.Data(25.1, 614));
      series4.getData().add(new XYChart.Data(23.4, 544));
      series4.getData().add(new XYChart.Data(22.6, 445));
      scatterChart.getData().addAll(series4);
      series4.setName("Temperatue vs Icecream Sales");
      scatterChart.setPrefSize(200, 200);
      scatterChart.setLegendSide(Side.RIGHT);
      //Creating a flow pane
      FlowPane pane = new FlowPane();
      pane.getChildren().addAll(areaChart, linechart, bubbleChart, scatterChart, barchart);
      //Setting the Scene
      Scene scene = new Scene(pane, 600, 430);
      stage.setTitle("X-Y charts");
      stage.setScene(scene);
      stage.show();
   }
   public static void main(String args[]){
      launch(args);
   }
}

輸出

更新於: 2020-05-19

405 次瀏覽

啟動您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.