JavaFX LineChart裁剪了系列图

问题描述

错误功能?当该值为0(最小)或1(最大)时,该系列似乎已被裁剪。我希望红色图层位于前面并且不会被剪裁。

series clipped at min and max

将min,max设置为-0.1,1.1可以避免削波,但会造成混乱。

min and max tweaked

除了调整背景和填充,我想不出其他任何尝试。

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.chart.*;
import javafx.stage.Stage;

public class LineChartClipping extends Application {

  LineChart makeRoot() {
    NumberAxis xAxis = new NumberAxis();
    NumberAxis yAxis = new NumberAxis(0,1,1); // (-0.1,1.1,1);
    var chart = new LineChart(xAxis,yAxis);
    var series = new LineChart.Series<>();
    chart.getData().add(series);
    double x = 0;
    for (var value : new double[]{0.5,1.0}) {
      series.getData().add(new LineChart.Data<>(x,value));  x += 2;
      series.getData().add(new LineChart.Data<>(x,value));
    }
    return chart;
  }

  @Override
  public void start(Stage stage) {
    stage.setScene(new Scene(makeRoot(),180,120));
    stage.show();
  }

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

在我的用例中,我这样做

    chart.setCreateSymbols(false);
    xAxis.setTickMarkVisible(false);
    xAxis.setMinorTickVisible(false);
    xAxis.setTickLabelsVisible(false);

因此最小/最大水平线如下所示:

enter image description here

  • macOS Catalina,视网膜iMac(hidpi
  • JavaFX 15.0.1,Java 15.0.1

解决方法

您需要使图表的范围略大于0到1,例如-0.1到1.1。图表恰好在0和1处停止,并且由于该线具有一定的粗细,因此会在边缘处进行剪裁。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...