Отрицательная гистограмма с Androidplot

Я использую библиотеку Androidplot для построения гистограммы для отображения чего-либо. Диапазон моих значений составляет от -40 до +40.

Как я могу построить бар с отрицательной стороной? Я просто хочу центрировать ноль по оси Y посередине, а столбцы должны расти вверх или вниз, если значение положительное или отрицательное. Мои бары растут от нижней границы вверх. Это должно выглядеть так: введите здесь описание изображения


person CoolKiffings    schedule 23.07.2012    source источник
comment
Я пытаюсь понять базовую гистограмму с графиком Android, у вас есть базовый пример кода для этого?   -  person Greg McNulty    schedule 27.10.2012


Ответы (3)


Это подходит для меня:

plot.centerOnRangeOrigin (0);

plot.setRangeLowerBoundary(0,BoundaryMode.AUTO);

Где plot является экземпляром XYPlot.

person Maria Reina    schedule 20.06.2014

Недавно в Androidplot 0.6.2 была добавлена ​​поддержка отрицательной полосы; вам нужно будет использовать последнюю версию для разработки получить его (он очень стабилен).

Если у вас есть правильная версия Androidplot, вы можете использовать предложение Марии Рейны, чтобы включить отображение отрицательных значений. Вот как я это делаю на скриншоте ниже:

plot.setUserRangeOrigin(0);
plot.setRangeBoundaries(0, BoundaryMode.AUTO, 0,BoundaryMode.AUTO);

введите здесь описание изображения

Примечание. В настоящее время существует ошибка, из-за которой, если вы используете режим наложения с 2 или более рядами и имеете отрицательные столбцы, порядок наложения отрицательных столбцов меняется на противоположный, в результате чего меньшие отрицательные значения в группе столбцов заслоняются более крупными. Если ваша цель — просто воспроизвести изображение выше, то все должно быть в порядке.

person Nick    schedule 21.06.2014
comment
Большое спасибо, мне действительно была нужна эта функция, и я не понял, почему она не работала при использовании 0.6.1. - person Kalem; 19.08.2014
comment
Немного точности: BoundaryMode.AUTO здесь не является обязательным. Вы также можете использовать BoundaryMode.FIXED, когда вам нужно исправить свои границы, такие как plot.setRangeBoundaries(min, max, BoundaryMode.FIXED);, где min является отрицательным значением или нет, и это все еще работает. - person Kalem; 19.08.2014
comment
@ Ник, что-то изменилось в последнем файле jar, чтобы это больше не работало? Я загрузил новейшую версию AndroidPlot 0.6.2 (androidplot-core-0.6.2-SNAPSHOT) и не могу заставить centerOnRangeOrigin работать должным образом. centerOnDomainOrigin работает должным образом. Любые идеи? - person buczek; 03.03.2015

Это отличный вопрос. Я думаю, что нет возможности сделать это с текущей версией AndroidPlot (0.6.0) с одной серией значений. Я создал обходной путь в своем проекте. Я знаю, что это не идеально, но это работает: создайте две перекрывающиеся серии, одну в зеленом цвете, а другую в цвете фона. Предположим, у вас есть текущее значение для рисования.

if (currentValue>=0) {
    greenRes[i] = Float.valueOf(currentValue);
    coverRes[i] = Float.valueOf(0);
}
else {
    greenRes[i] = Float.valueOf(0);
    coverRes[i] = Float.valueOf(currentValue);
}

Таким образом, у вас всегда будет зеленая полоса, начинающаяся с нулевой оси и идущая вверх или вниз.

person Stefano    schedule 24.10.2013
comment
Не могли бы вы предоставить фрагмент кода о том, как вы это используете? - person bgplaya; 12.05.2014