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); } }
输出
广告