Как отформатировать значения внутри MPAndroidChart?

2 Вопросы о библиотеке MPAndroidChart. Все мои значения y являются целыми числами, но отображаются как десятичные числа. Как я могу отобразить их как целые числа (без цифр)? Как я могу предотвратить отображение ylabels в виде десятичных знаков? Я знаю, что для значений y есть setFormatter, просто не понимаю, как его использовать...


person Dennis    schedule 12.11.2014    source источник
comment
Вы решили это? я имею в виду... что вы поместили в метод getFormattedValue() интерфейса ValueFormatter?   -  person gumuruh    schedule 09.07.2015


Ответы (2)


Взгляните на IValueFormatter интерфейс, предоставляемый библиотекой. С помощью этого интерфейса вы можете полностью настроить то, что будет отображаться на диаграмме, исходя из собственной логики.

Применение:

chart.setValueFormatter(new YourValueFormatter());
YLabels yl = chart.getYLabels();
yl.setFormatter(new YourValueFormatter());

ОБНОВЛЕНИЕ (для версий 2.0.0+ этой [библиотеки][2]):

Теперь ValueFormatter можно задать для каждого DataSet отдельно, или один и тот же ValueFormatter можно установить для всего объекта данных, содержащего все DataSets. Кроме того, класс YLabels теперь называется YAxis.

Пример:

// set for whole data object (individual DataSets also possible)
LineData data = new LineData(...);
data.setValueFormatter(new YourValueFormatter());

// YLabels are now called YAxis
YAxis yAxis = mChart.getAxisLeft(); // get the left or right axis
yAxis.setValueFormatter(new YourAxisValueFormatter());

ОБНОВЛЕНИЕ (для версий 3.0.0+ этой [библиотеки][2]):

Интерфейсы для форматирования были переименованы и расширены по своему функционалу. Теперь IAxisValueFormatter можно использовать для форматирования значений как XAxis, так и YAxis. Интерфейс IValueFormatter используется для настройки значений диаграммы.

Ссылка на документацию по ValueFormatter.

person Philipp Jahoda    schedule 14.11.2014
comment
Аааааа, теперь я понял. Очень красивое и простое решение! - person Dennis; 14.11.2014
comment
Фил, с каких пор YLabels поддерживает метод setValueFormatter()? Я пытаюсь сделать то же самое, но такого метода нет... (мне нужен LargeValueFormatter()) для моего случая, и, похоже, он не работает, если я устанавливаю LargeValueFormatter(). к самой диаграмме либо. - person Mike; 02.12.2014
comment
Вы используете последнюю версию библиотеки (1.7.4)? github.com/PhilJay/MPAndroidChart/releases - person Philipp Jahoda; 02.12.2014
comment
Я почти уверен, что да. Я обновил библиотеку 24 ноября. И ваш последний релиз был 18-го числа. - person Mike; 02.12.2014
comment
Первый. Я только что заметил, что имя метода изменено для YLabels на setFormatter(new YourValueFormatter()). Вы также должны обновить свой ответ, чтобы другие тоже не отвлекались. Спасибо! - person Mike; 02.12.2014
comment
Отсечение десятичных позиций не меняет метки правильно - после 2.0 - 2.4 они меняются на 2 - 2 (дубликаты). Любые идеи о том, как это исправить? - person James Cameron; 12.01.2015
comment
я использовал эту переменную с типом NumberFormat и установил ее в NumberFormat.getIntegerInstance(); но все же вернул десятичное число после его рендеринга. Любые подсказки @JamesCameron? - person gumuruh; 09.07.2015
comment
вернуть Math.round(значение)+; в getFormattedValue у меня сработало! - person Sudheesh Mohan; 14.06.2016
comment
@PhilippJahoda, как мне отправить свой ArrayList с метками оси X в средство форматирования значений оси. Я использовал xAxis.setValueFormatter(new DayAxisValueFormatter(mChart));, который устанавливает дату как 1 января, 2 января, а не даты, которые у меня есть - person Prabs; 18.02.2017
comment
Я использую xAxis.setLabelRotationAngle(-30f);, который корректирует дату в зависимости от пробела и немного наклоняет ее, чтобы метки не перекрывались. Удивительная библиотека @PhilippJahoda - person Prabs; 18.02.2017
comment
что, если я хочу заменить числа на строковую метку? пожалуйста, предложите для этого - person Anand Savjani; 17.05.2017
comment
тот же вопрос, что и у @AnandSavjani - person ; 20.11.2017
comment
@PhilippJahoda Ссылка на IAxisValueFormatter указывает на 404, не могли бы вы это исправить? - person Abby; 28.06.2019
comment
@Abby обновлено, и данные, и ось теперь используют один и тот же модуль форматирования. - person Philipp Jahoda; 28.06.2019
comment
Класс PercentFormatter имеет 2 разных конструктора. Пустой конструктор мне не помог, хотя я использовал процентный режим. Если pieData.setValueFormatter(new PercentFormatter()); не показывает значок процента, вы должны использовать второй конструктор следующим образом: pieData.setValueFormatter(new PercentFormatter(pieChart)); - person TeachMeJava; 26.12.2019

Если все, что вам нужно, это изменить количество знаков после запятой в значениях, DefaultValueFormatter будет достаточно.

pieDataSet.setDefaultValueFormatter(new DefaultValueFormatter(digits = 1))
//where digits is the number of decimal places

В приведенном выше примере 88,65 будет отформатировано как 88,7.

person peterchaula    schedule 30.08.2019