有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何判断堆叠条形图的轴的行为?

情况如下:

enter image description here

图形初始化如下:

protected NumberAxis xAxis;
protected NumberAxis yAxis;
protected StackedAreaChart<Number, Number> chart;

protected final XYChart.Series<Number, Number> waitingSeries
    = new XYChart.Series<>();
protected final XYChart.Series<Number, Number> startedSeries
    = new XYChart.Series<>();
protected final XYChart.Series<Number, Number> successSeries
    = new XYChart.Series<>();
protected final XYChart.Series<Number, Number> failureSeries
    = new XYChart.Series<>();

// ...

@Override
public void init()
{
    // ...

    xAxis = new NumberAxis();
    xAxis.setLabel("Line number");
    xAxis.setForceZeroInRange(false);
    xAxis.setTickUnit(1.0);
    xAxis.setTickMarkVisible(false);

    yAxis = new NumberAxis();
    yAxis.setTickMarkVisible(false);

    chart = new StackedAreaChart<>(xAxis, yAxis);

    chart.setAnimated(false);
    chart.setTitle("Matcher status by line");

    waitingSeries.setName("Waiting for children");
    startedSeries.setName("Started this line");
    successSeries.setName("Succeeded this line");
    failureSeries.setName("Failed this line");

    final ObservableList<XYChart.Series<Number, Number>> data
        = chart.getData();

    data.add(waitingSeries);
    data.add(startedSeries);
    data.add(successSeries);
    data.add(failureSeries);

    pane.setCenter(chart);
}

好的,那么:

  • 即使我在两个轴上设置记号不应可见,但它们是可见的
  • 尽管我告诉xAxis它的步长应该是1,但它显示的是分数
  • 然后是这个,我在这里更新数据:

(使用SO聊天和项目符号列表与代码解决bug)

@Override
public void showLineMatcherStatus(final List<LineMatcherStatus> list,
    final int startLine, final int nrLines)
{
    display.xAxis.setLowerBound(startLine);
    display.xAxis.setUpperBound(startLine + nrLines - 1);
    // etc

startLine在这个例子中是1,nrLines是25,那么,结束线是25。很好,边界得到尊重

。。。但是为什么x轴的范围是0到27.5

如何使轴正常工作


共 (1) 个答案

  1. # 1 楼答案

    默认情况下,NumberAxisautoRanging设置为true,以便让它尊重您需要的上下限

    xAxis.setAutoRanging(false);
    

    对于记号,如果你仔细观察你的图像,你会发现在实际数字旁边没有记号;仅在两者之间的“次要值”处

    所以你两者都需要

    xAxis.setTickMarkVisible(false);
    

    xAxis.setMinorTickVisible(false);