Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Gráfico de barras usando achartengine

Quiero dibujar un gráfico de barras que contiene cinco barras individuales – He utilizado Achartengine. Soy capaz de mostrar las cinco barras en el mismo color, pero quiero diferenciar una barra con un color diferente, pero no puedo mostrar más de un color. Por favor, muéstrame cómo mostrar diferentes colores. Mi código…

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 Solutions collect form web for “Gráfico de barras usando achartengine”

Puede lograrse ampliando las clases SimpleSeriesRenderer y BarChart. Aquí está mi solución para RangeBarChart (todos gracias a gilenodm, ojalá tuviera alguna reputación para upvote su respuesta):

 import org.achartengine.renderer.SimpleSeriesRenderer; public class AdvancedSeriesRenderer extends SimpleSeriesRenderer { private int [] colors; public void AdvancedSeriesRenderer () { } public int getColor ( int position ) { return colors[position]; } } import org.achartengine.chart.RangeBarChart; import org.achartengine.model.XYMultipleSeriesDataset; import org.achartengine.renderer.SimpleSeriesRenderer; import org.achartengine.renderer.XYMultipleSeriesRenderer; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Paint.Style; public class AdvancedRangeBarChart extends RangeBarChart { private int [] barChartColors; public AdvancedRangeBarChart ( XYMultipleSeriesDataset dataset, XYMultipleSeriesRenderer renderer, Type type ) { super ( dataset, renderer, type ); } public void setColors ( int [] colorsIn ) { barChartColors = colorsIn; } @Override public void drawSeries ( Canvas canvas, Paint paint, float [] points, SimpleSeriesRenderer seriesRenderer, float yAxisValue, int seriesIndex, int startIndex ) { int seriesNr = mDataset.getSeriesCount (); int length = points.length; paint.setStyle ( Style.FILL ); float halfDiffX = getHalfDiffX ( points, length, seriesNr ); int start = 0; if ( startIndex > 0 ) { start = 2; } for ( int i = start; i < length; i += 4 ) { int colorIndex = (int) ( i / 4 ) % barChartColors.length; paint.setColor ( barChartColors[colorIndex] ); if ( points.length > i + 3 ) { float xMin = points[i]; float yMin = points[i + 1]; // xMin = xMax float xMax = points[i + 2]; float yMax = points[i + 3]; drawBar ( canvas, xMin, yMin, xMax, yMax, halfDiffX, seriesNr, seriesIndex, paint ); } } } } 

Hice un hack para lograr este efecto. Org.achartengine.SimpleSeriesRenderer cambió la clase, agregué un int[] colors y un boolean multipleColorsEnabled con sus getters y setters. Por lo tanto, he cambiado, org.achartengine.BarChart en la clase, el método drawSeries, donde se establece el color de cada barra en un bucle, de la siguiente manera:

 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); } 

En la clase que carga los datos utilizados:

 seriesRenderer.setMultipleColorsEnabled(true); seriesRenderer.setColors(myColors); 

Ha pasado un tiempo desde que uso el achartengine, pero creo que cada serie tiene que tener su propio color. Como solución, puede crear la barra que desea diferenciar un miembro de su propia serie y establecer un color diferente para esa serie. Tal vez alguien tiene una mejor manera aunque.

Tienes que usar diferentes SimpleSeriesRenderer dentro de la llamada a buildBarRenderer () y definir tantas series como el número deseado de colores, de esta manera (reemplazando tus dos primeras líneas de código):

 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) }; 

El resto del código debe ser el mismo que el tuyo, pero no lo he probado. AFAIK necesita diferentes series , ya que cada serie solo puede tener un color.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.