如果出现隐形序列,如何自动缩放JavaFX LineChart?

时间:2018-02-06 07:57:08

标签: javafx linechart

我需要在LineChart上显示/隐藏系列的可能性。现在我这样做:

series.getNode().setVisible(false);
series.getNode().setManaged(false);

但是,虽然此后系列不可见,但图表轴自动调整仍然会考虑系列数据的范围。我累了设置托管财产:

df.iloc[:, 5:-3].apply(lambda row: row.nlargest(2).values[-1],axis=1)

但没有成功。那么,有没有办法隐藏一个系列并将其从轴autorange中排除?

1 个答案:

答案 0 :(得分:0)

似乎,目前唯一的方法是扩展LineChart并覆盖updateAxisRange()以修改它以仅考虑可见系列:

public class MLineChart<X, Y> extends LineChart<X, Y> {

  public MLineChart(@NamedArg("xAxis") Axis<X> xAxis, @NamedArg("yAxis") Axis<Y> yAxis) {
    super(xAxis, yAxis);
  }

  @Override
  protected void updateAxisRange() {
    final Axis<X> xa = getXAxis();
    final Axis<Y> ya = getYAxis();
    List<X> xData = null;
    List<Y> yData = null;
    if (xa.isAutoRanging()) xData = new ArrayList<X>();
    if (ya.isAutoRanging()) yData = new ArrayList<Y>();
    if (xData != null || yData != null) {
      for (Series<X, Y> series : getData()) {
        if (series.getNode().isVisible()) { // consider only visible series
          for (Data<X, Y> data : series.getData()) {
            if (xData != null) xData.add(data.getXValue());
            if (yData != null) yData.add(data.getYValue());
          }
        }
      }
      // RT-32838 No need to invalidate range if there is one data item - whose value is zero.
      if (xData != null && !(xData.size() == 1 && getXAxis().toNumericValue(xData.get(0)) == 0)) {
        xa.invalidateRange(xData);
      }
      if (yData != null && !(yData.size() == 1 && getYAxis().toNumericValue(yData.get(0)) == 0)) {
        ya.invalidateRange(yData);
      }

    }
  }
}