MPandroidChart - увеличивать и уменьшать масштаб, чтобы соответствовать значениям только по оси Y

Я работаю с потрясающей библиотекой с открытым исходным кодом MPandroidChart и заполняю диаграмму в реальном времени из данных, которые я получаю в сети. При заполнении диаграммы новыми значениями я разрешаю отображать только определенное количество индекса x, используя "setVisibleXRange()"и"moveViewToX()", чтобы переместить диаграмму в левую часть экрана, отображая только последние записи за раз.

все это прекрасно работает, но я хочу создать ситуацию, когда порт вида изменяется так, чтобы он точно соответствовал максимальным и минимальным видимым значениям, так же, как "fitScreen()", но при этом изменяется только ось Y. "zoomOut()" и "zoomIn()" используют относительные входы, так же как и "zoom()", поэтому я не могу использовать их на основе моих данных. мне нужен способ позиционирования вида по оси Y, чтобы он соответствовал различным диапазонам в каждом цикле, например: от 2 до 15 или от -98 до 34 и так далее.

у кого-нибудь есть идеи о том, как это можно сделать? цените все ответы. @PhillJay

2 ответа

Это немного стар, но для кого это может касаться, ответ не об оси. Что вам нужно, это изменить видовой экран:

private void autoScaleLineChart(@NonNull LineChart lineChart) {
    if (lineChart.getLineData() == null) return;

    float lowestVisibleX = lineChart.getLowestVisibleX();
    float highestVisibleX = lineChart.getHighestVisibleX();

    LineData chartData = lineChart.getLineData();
    chartData.calcMinMaxY(lowestVisibleX, highestVisibleX);
    //calculating offsets for axes to display correct labels
    lineChart.getXAxis().calculate(chartData.getXMin(), chartData.getXMax());
    calculateMinMaxForYAxis(lineChart, YAxis.AxisDependency.LEFT);
    calculateMinMaxForYAxis(lineChart, YAxis.AxisDependency.RIGHT);
    //this is where the magic happens
    lineChart.calculateOffsets();
    //if nothing happens try adding
    //lineChart.invalidate();
}

private void calculateMinMaxForYAxis(@NonNull LineChart lineChart, @NonNull YAxis.AxisDependency axisDependency) {
    LineData chartData = lineChart.getLineData();
    YAxis yAxis = lineChart.getAxis(axisDependency);
    if (yAxis.isEnabled()) {
        float yMin = chartData.getYMin(axisDependency);
        float yMax = chartData.getYMax(axisDependency);
        yAxis.calculate(yMin, yMax);
    }
}

Также может быть полезно прочитать это: https://github.com/PhilJay/MPAndroidChart/wiki/Modifying-the-Viewport

Возможно, этот ответ не идеален, но Yaxis может уместиться на экране:

chart.getAxisLeft().setLabelCount(10, true);
chart.fitScreen();

Я предлагаю вам прочитать документацию YAxis.

Сосредоточьтесь на следующих методах:

  • setStartAtZero(...)
  • setAxisMaxValue(...) & setAxisMinValue(...)
  • setSpaceTop(...)
  • setSpaceBottom(...)

С некоторыми из них вы должны быть в состоянии ограничить видимую область оси точно в соответствии с вашими потребностями.

Другие вопросы по тегам