当前位置: 首页 > 知识库问答 >
问题:

当我插入空值时,在折线图中显示标签

干亮
2023-03-14

我有一个使用JavaFX任务显示一些数据的折线图:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.stage.Stage;


public class LineChartSample extends Application {

    @Override public void start(Stage stage) {
        stage.setTitle("Line Chart Sample");
        //defining the axes
        final NumberAxis xAxis = new NumberAxis();
        final NumberAxis yAxis = new NumberAxis();
        xAxis.setLabel("Number of Month");
        //creating the chart
        final LineChart<Number,Number> lineChart = 
                new LineChart<Number,Number>(xAxis,yAxis);

        lineChart.setTitle("Stock Monitoring, 2010");
        //defining a series
        XYChart.Series series = new XYChart.Series();
        series.setName("My portfolio");
        //populating the series with data
        series.getData().add(new XYChart.Data(1, 23));
        series.getData().add(new XYChart.Data(2, 14));
        series.getData().add(new XYChart.Data(3, 15));
        series.getData().add(new XYChart.Data(4, 24));
        series.getData().add(new XYChart.Data(5, 34));
        series.getData().add(new XYChart.Data(6, 36));
        series.getData().add(new XYChart.Data(7, 22));
        series.getData().add(new XYChart.Data(8, 45));
        series.getData().add(new XYChart.Data(9, 43));
        series.getData().add(new XYChart.Data(10, 17));
        series.getData().add(new XYChart.Data(11, 29));
        series.getData().add(new XYChart.Data(12, 25));

        Scene scene  = new Scene(lineChart,800,600);
        lineChart.getData().add(series);

        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

当我有空数据时,我很感兴趣,因为我必须插入行值,如何在图表中显示标签“无数据”?

有没有这样的例子

共有1个答案

衡玄裳
2023-03-14

有趣的问题,如XYChart。数据是最终的,我取得的最好成绩是:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.scene.text.Text;
import javafx.stage.Stage;


public class LineChartSample extends Application {

    static void checkNoData(XYChart.Series<Integer,Double> series) {
        double d1 = 0;
        XYChart.Data<Integer,Double> last = null;
        for (Object data : series.getData()) {
            if (data instanceof XYChart.Data<?,?>) {
                XYChart.Data<Integer,Double> cdata = (XYChart.Data<Integer,Double>)data;
                if (last != null && last.getYValue() == null) { 
                    double mid = (d1 + cdata.getYValue())/2;
                    last.setYValue(mid);
                    Text nodata = new Text("no data");
                    nodata.setTranslateY(nodata.getLayoutBounds().getHeight()/2);
                    last.setNode(nodata);
                }
                if (last != null) d1 = last.getYValue();
                last = cdata;
            }
        }
        if (last != null && last.getYValue() == null) {
            last.setYValue(d1);
            Text nodata = new Text("no data");
            nodata.setTranslateY(nodata.getLayoutBounds().getHeight()/2);
            last.setNode(nodata);

        }
    }
    @Override public void start(Stage stage) {
        stage.setTitle("Line Chart Sample");
        //defining the axes
        final NumberAxis xAxis = new NumberAxis();
        final NumberAxis yAxis = new NumberAxis();
        xAxis.setLabel("Number of Month");
        //creating the chart
        final LineChart<Number,Number> lineChart = 
                new LineChart<Number,Number>(xAxis,yAxis);

        lineChart.setTitle("Stock Monitoring, 2010");
        //defining a series
        XYChart.Series series = new XYChart.Series();
        series.setName("My portfolio");
        //populating the series with data
        series.getData().add(new XYChart.Data(1, 23.0));
        series.getData().add(new XYChart.Data(2, 14.0));
        series.getData().add(new XYChart.Data(3, 15.0));
        series.getData().add(new XYChart.Data(4, 24.0));
        series.getData().add(new XYChart.Data(5, null));
        series.getData().add(new XYChart.Data(6, 36.0));
        series.getData().add(new XYChart.Data(7, 22.0));
        series.getData().add(new XYChart.Data(8, 45.0));
        series.getData().add(new XYChart.Data(9, 43.0));
        series.getData().add(new XYChart.Data(10, 17.0));
        series.getData().add(new XYChart.Data(11, 29.0));
        series.getData().add(new XYChart.Data(12, 25.0));


        checkNoData(series);

        Scene scene  = new Scene(lineChart,800,600);
        lineChart.getData().add(series);

        GUIHelper.allowImageDrag(lineChart);
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
 类似资料:
  • 我已经使用禁用了LineChart中的所有值。现在我希望折线图中的特定值被启用时,用户触及到这一点。我使用尝试了它,但对我不起作用。

  • 我正在尝试用MPAndroidChart构建一个LineChart,来表示我从分贝仪得到的值。问题是,我只得到一个表示当前值的移动点,但我希望有一条线,在移动时,显示值。脑电图之类的东西要清楚。 这是onCreate()方法中与图表相关的所有代码: 以下是我用来更新图表中数据的方法: 因为我需要动态更新数据,所以从线程调用updateChart(float x,float y)。这是我运行应用程序

  • 我正在启动新的Angular应用程序,我用Angulal-CLI(beta 22.1)初始化了它。但是当我在图表中添加测试数据(5个值)时,它似乎缩放错误,只显示了前两个值,并在图表的整个长度上拉伸它们(见图)。 该项目是空白的,不包含任何CSS。 我的: chart.js库是通过添加的: 我真的不知道我错在哪里。我尝试了许多不同的选项(,,包装

  • 我正在使用组合图和图表。js在我的网站上。 PFB我用的代码。 var PCTCtx=document.getElementById("pctdiv"). getContext("2d"); 我需要在条形图上显示的线。 我在这里为相同的内容创建了一个jsfiddle 任何帮助都是可观的。

  • 我使用的是chart.bundle.min.js 2.3.0。

  • 使用chart.js的示例折线图代码(http://www.chartjs.org/docs/#line-图表示例用法),我能够在js fiddle或独立页面上创建一个完美的折线图。 问题是,当将完全相同的配置代码插入到我的项目中并转换为自定义敲除绑定时,不会显示应位于图表左边缘和下边缘的数据标签。除此之外,它看起来和样品完全一样,就像它应该的那样。 我的代码太复杂,无法包含在这里,所以我要寻找的