MPAndroidChart: комбинированная диаграмма
Я использую библиотеку MPAndroidChart.
Я хотел использовать CombinedChart
создать такую диаграмму:
Это возможно? Я попробовал это, но это, кажется, не работает, потому что записи не работают, как я ожидал. Вы не можете сказать, что запись имеет значение 2 по оси X и значение 300 по оси Y. Также я не могу создать две разные оси Y, одну для баров и одну для линий.
Любопытно, что MPAndroidChart сначала добавляет все x-значения, а затем все y-значения, и у вас нет возможности контролировать, какое y-значение принадлежит какому-либо x-значению, потому что он просто вставляет y-значения в порядке их появления и связывает это со следующим значением x.
Есть ли способ, как я могу создать такую диаграмму с MPAndroidChart. На самом деле я не хочу, чтобы меня заставляли использовать Google Charts из-за необходимого подключения к Интернету (но создание такого рода диаграмм отлично бы работало с Google Charts).
2 ответа
- Вы можете иметь 2 разных оси
- Вы можете контролировать, какое значение y принадлежит какому значению x (конечно!)
- посмотрите пример комбинированного графика
- это выглядит так:
ОБНОВЛЕНИЕ: v3.0.0+
Пример для CombinedChart
было расширено, теперь разрешено сгруппировать бары и сгруппированные бары вместе с другими типами диаграмм
Документация показывает, как настроить CombinedChart
,
Вы можете создать собственный класс, расширяющий View, и в методе onDraw создать прямоугольники необходимой высоты, ширины и положения для стержней. Что касается линий, это очевидно, установите обводку, чтобы сделать ее более заметной.
Я использовал собственный вид для создания полос в моем приложении WhiteMarker и линий в Chron.
Поскольку принятый aswer имеет неработающие ссылки, вы должны использовать:
<com.github.mikephil.charting.charts.CombinedChart
android:id="@+id/chart"/>
В вашем XML
а затем вот некоторый код:
LineData linearData = new LineData(set1);
// Set you LinearData
BarData barData = new BarData(set2);
// Set you LinearData
CombinedData data=new CombinedData();
data.setData(linearData);
data.setData(barData);
РЕДАКТИРОВАТЬ: Оригинальный ответ был изменен, чтобы отразить то, что я только что написал. Ссылки были обновлены, и был добавлен некоторый код.