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坐标。
该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) { //创建面积图 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"); //将数据设置为面积图 areaChart.getData().addAll(series); areaChart.setPrefSize(200, 200); //创建条形图 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); //创建气泡图 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); //创建折线图 NumberAxis xAxis3 = new NumberAxis(); NumberAxis yAxis3 = new NumberAxis(); //设置轴的标签 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"); //将数据设置为折线图 linechart.getData().add(series3); linechart.setPrefSize(200, 200); //创建散点图 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); //创建流窗格 FlowPane pane = new FlowPane(); pane.getChildren().addAll(areaChart, linechart, bubbleChart, scatterChart, barchart); //设置场景 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); } }
输出结果