Android - MPAndroidChart - наложение 3 тактов

Этот вопрос был задан здесь, но до сих пор не получил ответа...

Используя пример StackedBarActivity из библиотеки MPAndroidChart, чтобы нарисовать 3 полосы слияния, и установив значения как [1,2,3]... диаграмма показана с суммой всех чисел, 1+2+3=6... но что Я хочу, чтобы объединить все значения, чтобы значение 2 наложение значения 3 и значение 1 наложение значения 2, как показано на изображении ниже:

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

По сути, я хочу использовать действие StackedBarActivity, но не складывать все столбцы, вместо этого я хочу поставить один за другим. Визуально я знаю, что могу вычесть большее значение из меньшего, составив сумму до 3 (1+1+1), но тогда значение 3 сохранит значение 1, а не значение 3.

Есть ли способ, которым я могу сделать это с помощью этого класса? Есть ли лучший класс для этого?

2 ответа

Решение

Я знаю, что опоздал с ответом на 6 месяцев, но я думаю, что это рабочее решение:

List<String> xVals = getXVals(); //some function to get values
List<BarEntry> yVals = new ArrayList();
int[] barColors = new int[bars.size() * numberOfValues];
int index=0;
for (Bar bar : bars) {
    List<BarEntry> yValsForBar = new ArrayList();
    for (int i=0; i<numberOfValues; i++) {
        yValsForBar.add(new BarEntry(bar.value(i), i));
        barColors[i+index*numberOfValues] = bar.color();
    }
    yVals.addAll(yValsForBar);
    index++;
}
BarDataSet dataSet = new BarDataSet(yVals, "data set");
BarData data = new BarData(xVals);
data.addDataSet(dataSet);

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

Расширяя ответ n4yArh.

В последней версии библиотеки конструктор для BarEntry был изменен на BarEntry(x,y). Итак, линия

yValsForBar.add(new BarEntry(bar.value(i),i));

следует изменить на

yValsForBar.add(new BarEntry(i,bar.value(i));

и, конечно, чтобы использовать массив цветов, следующая строка отсутствует

dataSet.setColors(barColors);
Другие вопросы по тегам