Гистограмма с использованием ахартенгина - PullRequest
12 голосов
/ 23 марта 2011

Я хочу нарисовать гистограмму, которая содержит пять отдельных баров - я использовал Achartengine.Я могу отобразить все пять столбцов в одном цвете, но хочу выделить один столбец с другим цветом, но я не могу отобразить более одного цвета.Пожалуйста, покажите мне, как отображать разные цвета.Мой код ...

         values.add(new double[] {21,56,33,10,20});         
        int[] colors = new int[] { Color.rgb(227, 121, 15) };
        XYMultipleSeriesRenderer renderer = buildBarRenderer(colors);
        setChartSettings(renderer, "", "", "", 0,5, 0,100, Color.WHITE, Color.WHITE);
        renderer.setXLabels(8);
        renderer.setYLabels(10);
        renderer.setDisplayChartValues(true);
       mChartView= ChartFactory.getBarChartView(context, buildBarDataset(titles, values), renderer,
            Type.DEFAULT);
        layout.addView(mChartView, 350, 500);

Ответы [ 4 ]

6 голосов
/ 02 июня 2012

Может быть достигнуто путем расширения классов SimpleSeriesRenderer и BarChart.Вот мое решение для RangeBarChart (все благодаря gilenodm, жаль, что у меня не было репутации, чтобы подтвердить ваш ответ):

5 голосов
/ 29 мая 2012

Я сделал хак для достижения этого эффекта.Org.achartengine.SimpleSeriesRenderer изменил класс, я добавил int[] colors и boolean multipleColorsEnabled с его геттерами и сеттерами.Итак, я изменил org.achartengine.BarChart в классе метод drawSeries, где задается цвет каждой полосы в цикле следующим образом:

int j = startIndex;
for (int i = 0; i < length; i += 2) {
    if (seriesRenderer.isMultipleColorsEnabled()) {
        paint.setColor(seriesRenderer.getColors()[j++]);
    } else {
        paint.setColor(seriesRenderer.getColor());
    }
    float x = points[i];
    float y = points[i + 1];
    drawBar(canvas, x, yAxisValue, x, y, halfDiffX, seriesNr,
        seriesIndex, paint);
}

В классе, который загружает используемые данные:

seriesRenderer.setMultipleColorsEnabled(true);
seriesRenderer.setColors(myColors);
2 голосов
/ 23 марта 2011

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

0 голосов
/ 03 мая 2012

Вы должны использовать другой SimpleSeriesRenderer внутри buildBarRenderer () , и таким образом определить столько серий, сколько нужно желаемого количества цветов (заменяя ваши первые две строки кода):

values.add(new double[] {21});  
values.add(new double[] {56});  
values.add(new double[] {33});  
//ETC.
int[] colors = new int[] { Color.rgb(227, 121, 15),
                           Color.rgb(227, 121, 227), 
                           Color.rgb(127, 121, 127) };

Остальной код должен быть таким же, как ваш, но я его не проверял.AFAIK вам нужны разные серии , потому что каждая серия может иметь только один цвет.

...