如何为JavaFX xy图表的绘制区域着色?

所有XY图表都有一个名为layoutPlotChildren()的抽象方法。为XY图表的绘制区域(区域)着色的一种方法是覆盖此方法。通常,它被称为更新和布局子图。

在此方法的主体中-

  • 获取系列数据。

  • 提取绘制的点。

  • 使用提取的点在绘图区域中绘制多边形。

  • 将所需的颜色设置为多边形。

示例

import javafx.application.Application;

import javafx.collections.FXCollections;

import javafx.collections.ObservableList;

import javafx.scene.Scene;

import javafx.stage.Stage;

import javafx.scene.chart.LineChart;

import javafx.scene.chart.NumberAxis;

import javafx.scene.chart.XYChart;

import javafx.scene.chart.XYChart.Series;

import javafx.scene.layout.StackPane;

import javafx.scene.paint.Color;

import javafx.scene.shape.Polygon;

public class EnhancingGraphPlot extends Application {

   public void start(Stage stage) {

      //定义x轴

      NumberAxis xAxis = new NumberAxis(1960, 2020, 10);

      xAxis.setLabel("Years");

      //定义y轴

      NumberAxis yAxis = new NumberAxis (0, 350, 50);

      yAxis.setLabel("No.of schools");

      //准备XY图表的数据

      XYChart.Series<Number,Number> series = new XYChart.Series<Number,Number>();

      series.setName("No of schools in an year");

      series.getData().add(new XYChart.Data<Number,Number>(1970, 15));

      series.getData().add(new XYChart.Data<Number,Number>(1980, 30));

      series.getData().add(new XYChart.Data<Number,Number>(1990, 60));

      series.getData().add(new XYChart.Data<Number,Number>(2000, 120));

      series.getData().add(new XYChart.Data<Number,Number>(2013, 240));

      series.getData().add(new XYChart.Data<Number,Number>(2014, 300));

      //创建数据

      ObservableList<Series<Number, Number>> data =

      FXCollections.observableArrayList(series);

      //创建折线图

      LineChart<Number,Number> lineChart = new LineChart<Number,Number>(xAxis, yAxis, data ) {

         //覆盖layoutPlotChildren方法

         protected void layoutPlotChildren() {

            super.layoutPlotChildren();

            Series<Number,Number> series = (Series<Number,Number>)

            getData().get(0);

            ObservableList<Data<Number,Number>> listOfData = series.getData();

            for(int i = 0; i < listOfData.size()-1; i++) {

               double x1 = getXAxis().getDisplayPosition(listOfData.get(i).getXValue());

               double y1 = getYAxis().getDisplayPosition(0);

               double x2 = getXAxis().getDisplayPosition(listOfData.get((i + 1)).getXValue());

               double y2 = getYAxis().getDisplayPosition(0);

               Polygon polygon = new Polygon();

               polygon.getPoints().addAll(new Double[]{

                  x1,y1, x1, getYAxis().getDisplayPosition(listOfData.get(i).getYValue()), x2,getYAxis().getDisplayPosition(listOfData.get((i+1)).getYValue()), x2,y2

               });

               getPlotChildren().add(polygon);

               polygon.toFront();

               polygon.setFill(Color.DIMGRAY);

            }

         }

      };

      //将折线图添加到堆栈窗格

      StackPane pane = new StackPane(lineChart);

      //设置场景

      Scene scene = new Scene(pane, 595, 300);

      stage.setTitle("Line Chart");

      stage.setScene(scene);

      stage.show();

   }

   public static void main(String args[]){

      launch(args);

   }

}

输出结果


以上是 如何为JavaFX xy图表的绘制区域着色? 的全部内容, 来源链接: utcz.com/z/316489.html

回到顶部