【问题标题】:Removing negative values from axis从轴中删除负值
【发布时间】:2015-05-17 18:15:24
【问题描述】:

我有一个BarChart 和一个LineChart

可能的值从负(-)到正(+)。我如何只显示正轴标签?就像只删除数字一样。

我应该制作自定义图表还是有更简单的方法?

【问题讨论】:

    标签: java javafx-8 bar-chart linechart axis-labels


    【解决方案1】:

    您可以将 Y 轴下限设置为 0 并禁用自动量程:

        yAxis.setAutoRanging(false);
        yAxis.setLowerBound(0);
    

    这是一个例子:

    public class FXChart extends Application {
    
        @Override
        public void start(Stage stage) {
            final NumberAxis xAxis = new NumberAxis();
            final NumberAxis yAxis = new NumberAxis();
            final LineChart<Number, Number> lineChart
                    = new LineChart<>(xAxis, yAxis);
    
            //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));
    
            yAxis.setAutoRanging(false);
            yAxis.setLowerBound(0);
    
            Scene scene = new Scene(lineChart, 800, 600);
            lineChart.getData().add(series);
    
            stage.setScene(scene);
            stage.show();
        }
    }
    

    【讨论】:

      【解决方案2】:

      查看了 NumberAxis 源代码后,我发现 NumberAxis 类中的 DefaultFormatter 类对此负责。所以重写它的 toString 方法就足够了。

      myAxis.setTickLabelFormatter(new NumberAxis.DefaultFormatter(neerslagAxis) {
                  @Override
                  public String toString(Number object) {
                      if ((double) object < 0) {
                          return "";
                      } else {
                          return ("" + object).replace(".0", "");
                      }
                  }
              });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-02-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-07
        • 2011-09-29
        • 2010-11-12
        • 2019-05-17
        相关资源
        最近更新 更多