MPAndroidChart: как изменить порядок горизонтальной диаграммы?

Просто надеясь, что кто-то здесь сможет объяснить, как изменить порядок горизонтальной диаграммы, которая показана на скриншоте MPAndroidChart (поэтому вместо 44.0 вверху она будет внизу).

Код ниже показывает, как я создаю BarDataSet, который используется для создания HorizontalBarChart.

ArrayList<BarEntry> yVals1 = new ArrayList<BarEntry>();
for (int i = 0; i < count; i++) {
            float val = (float) (Math.random() * range);
            yVals1.add(new BarEntry(i * spaceForBar, i * 4));
}
BarDataSet set1 = new BarDataSet(yVals1, "DataSet 1");

Я попытался изменить цикл for, чтобы набор данных был добавлен в обратном порядке, но кажется, что создается тот же объект HorizontalBarChart.

ArrayList<BarEntry> yVals1 = new ArrayList<BarEntry>();
for (int i = count-1; i >= 0; i--) {
            float val = (float) (Math.random() * range);
            yVals1.add(new BarEntry(i * spaceForBar, i * 4));
}
BarDataSet set1 = new BarDataSet(yVals1, "DataSet 1");

Надеюсь, кто-нибудь сможет показать мне способ изменить порядок в этом графике.

Я уже попробовал приведенный ниже код, который является одним из предложенных ответов. Ранее я нашел ту же самую ссылку, которой они поделились. Эта строка кода переворачивает график так, что он находится на другой стороне (см. Второй скриншот)

mChart.getAxisLeft().setInverted(true);

Снимок экрана с изображением HorizontalBarChart

Скриншот HorizontalBarChart с перевернутой левой осью

2 ответа

Решение

Вы просто пропустили замену i * spaceForBar от (count - i) * spaceForBar,

Таким образом, последовательность координат при рендеринге становится (при условии count = 10):

(10 * 2, 0 * 4) => (9 * 2, 1 * 4) => (8 * 2, 2 * 4) => ... => (0 * 2, 10 * 4)

Итак, ваш код становится:

ArrayList<BarEntry> yVals1 = new ArrayList<BarEntry> ();
for (int i = 0; i < count; i++) {
    float val = (float) (Math.random () * range);
    yVals1.add (new BarEntry ((count - i) * spaceForBar, i * 4));
}
BarDataSet set1 = new BarDataSet (yVals1, "DataSet 1");

chart.getAxisLeft().setInverted(true);

Взято из https://github.com/PhilJay/MPAndroidChart/issues/387.

Да. Вы можете инвертировать оси Y, если хотите: chart.getAxisLeft(). SetInverted(true); Это позволит высоким значениям отображаться внизу графика, а низкие значения - вверху. Ось X не может быть изменена по порядку. Имейте в виду, что эта функция не включена в последний предварительный релиз, а только в коммиты.

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