问题描述
错误或功能?当该值为0(最小)或1(最大)时,该系列似乎已被裁剪。我希望红色图层位于前面并且不会被剪裁。
将min,max设置为-0.1,1.1可以避免削波,但会造成混乱。
除了调整背景和填充,我想不出其他任何尝试。
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);
因此最小/最大水平线如下所示:
- macOS Catalina,视网膜iMac(hidpi)
- JavaFX 15.0.1,Java 15.0.1
解决方法
您需要使图表的范围略大于0到1,例如-0.1到1.1。图表恰好在0和1处停止,并且由于该线具有一定的粗细,因此会在边缘处进行剪裁。