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);
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 не может быть изменена по порядку. Имейте в виду, что эта функция не включена в последний предварительный релиз, а только в коммиты.