2015-12-10 9 views
3

Этот вопрос был достигнут here, но до сих пор не получил никакого ответа ...Android - MPAndroidChart - Overlay 3 бара

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

enter image description here

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

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

ответ

1

Я знаю, что я, как 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); 

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

+0

Яп, с некоторыми изменениями, которые работали для меня ... – slyzer

+0

Я бы предложил инвертировать циклы, чтобы список «yVals» мог хранить количество баров; а также изменение массива barCalors для хранения только числа баров. Это поможет, потому что тогда, когда вы показываете «Легенда», он показывает только количество баров, а не количество значений ... – slyzer

0

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

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

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

должен быть изменен на

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

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

dataSet.setColors(barColors); 
Смежные вопросы