¿Se pueden usar múltiples cartas de barras apiladas con Achartengine?
Intenté agregar otro conjunto de valores al ejemplo de demostración de gráficos de barras apilados con achartengine , pero los nuevos valores introducidos por mí no aparecen en el gráfico. ¿Las barras de apilamiento están limitadas a dos barras?
public Intent getIntent(Context context) { String[] titles = new String[] { "Good", "Defect", "Repair" }; List<double[]> values = new ArrayList<double[]>(); values.add(new double[] { 14230, 12300, 1424, 15240, 15900, 19200, 22030, 21200, 19500, 15500, 12060, 14000 }); values.add(new double[] { 14230, 12300, 14240, 15244, 15900, 19200, 22030, 21200, 19500, 15500, 12600, 14000 }); values.add(new double[] { 5230, 7300, 9240, 10540, 7900, 9200, 12030, 11200, 9500, 10500, 11600, 13500 }); int[] colors = new int[] { Color.GREEN, Color.YELLOW, Color.RED }; XYMultipleSeriesRenderer renderer = buildBarRenderer(colors); setChartSettings(renderer, "Machine Efficiency Rates", "Machine", "NET produce", 0.5, 12.5, 0, 24000, Color.GRAY, Color.LTGRAY); renderer.getSeriesRendererAt(0).setDisplayChartValues(true); renderer.getSeriesRendererAt(1).setDisplayChartValues(true); renderer.getSeriesRendererAt(2).setDisplayChartValues(true); renderer.setXLabels(12); renderer.setYLabels(5); renderer.setXLabelsAlign(Align.LEFT); renderer.setYLabelsAlign(Align.LEFT); renderer.setPanEnabled(true, false); renderer.setZoomEnabled(true); renderer.setZoomRate(1.1f); renderer.setBarSpacing(0.5f); return ChartFactory.getBarChartIntent(context, buildBarDataset(titles, values), renderer, Type.STACKED); }
- ¿Cómo obtengo un botón para abrir otra actividad en Android Studio?
- Android: dar una vista web esquinas redondeadas?
- Android - Establecer Layout_Gravity de forma programática para LinearLayout
- ¿Es esto cómo programar un método java para que se ejecute 1 segundo después?
- Final de Android vs Vistas de texto privadas
- Android: cómo obtener el día actual de la semana (lunes, etc ...) en el idioma del usuario?
- ButterKnife onclick no funciona
- Cómo usar Google Cloud Connection Server para enviar mensajes de GCM en sentido ascendente
- Intentando crear una solicitud SOAP correcta
- No se puede resolver la actividad para: Intención cuando se realizan pruebas de instrumentación en las actividades de Android
- Exportar mis datos en el archivo CSV desde la aplicación Android
- Error de Android: recreate () debe ser llamado desde el subproceso principal
- Cómo realizar una devolución de llamada desde un servicio a una actividad
Hay un malentendido en la forma en que AChartEngine muestra gráficas de barras apiladas. Realmente no los apila, sino que los muestra uno sobre el otro. Esto significa que usted querrá agregar siempre los valores más grandes primero, luego los más pequeños y así sucesivamente, ya que representa la primera serie, la segunda por encima de la primera y así sucesivamente.
UPDATE: A partir de la versión 1.2.0, hay los nuevos gráficos de barras apilados HEAP
, que se muestran en la forma que usted necesita.
No pude encontrar una buena respuesta. Sin embargo, puede utilizar getCombinedXYChartIntent para crear varias barras apiladas.
Utilizo el CombinedTemperatureChart como una plantilla y modificado para lograr esto.
El código bruto inicial es este
package org.achartengine.chartdemo.demo.chart; import java.util.ArrayList; import java.util.List; import org.achartengine.ChartFactory; import org.achartengine.chart.BarChart; import org.achartengine.chart.BubbleChart; import org.achartengine.chart.CubicLineChart; import org.achartengine.chart.LineChart; import org.achartengine.chart.PointStyle; import org.achartengine.model.XYMultipleSeriesDataset; import org.achartengine.model.XYSeries; import org.achartengine.model.XYValueSeries; import org.achartengine.renderer.XYMultipleSeriesRenderer; import org.achartengine.renderer.XYSeriesRenderer; import android.content.Context; import android.content.Intent; import android.graphics.Color; import android.graphics.Paint.Align; /** * Combined temperature demo chart. */ public class CombinedTemperatureChart extends AbstractDemoChart { /** * Returns the chart name. * * @return the chart name */ public String getName() { return "Combined temperature"; } /** * Returns the chart description. * * @return the chart description */ public String getDesc() { return "The average temperature in 2 Greek islands, water temperature and sun shine hours (combined chart)"; } /** * Executes the chart demo. * * @param context the context * @return the built intent */ public Intent execute(Context context) { String[] titles = new String[] { "Crete Air Temperature", "Skiathos Air Temperature" }; List<double[]> x = new ArrayList<double[]>(); for (int i = 0; i < titles.length; i++) { x.add(new double[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }); } List<double[]> values = new ArrayList<double[]>(); values.add(new double[] { 12.3, 12.5, 13.8, 16.8, 20.4, 24.4, 26.4, 26.1, 23.6, 20.3, 17.2, 13.9 }); values.add(new double[] { 9, 10, 11, 15, 19, 23, 26, 25, 22, 18, 13, 10 }); int[] colors = new int[] { Color.GREEN, Color.rgb(200, 150, 0) }; PointStyle[] styles = new PointStyle[] { PointStyle.CIRCLE, PointStyle.DIAMOND }; XYMultipleSeriesRenderer renderer = buildRenderer(colors, styles); //renderer.setPointSize(5.5f); int length = renderer.getSeriesRendererCount(); for (int i = 0; i < length; i++) { XYSeriesRenderer r = (XYSeriesRenderer) renderer.getSeriesRendererAt(i); r.setDisplayChartValues(true); r.setChartValuesTextSize(25); //r.setLineWidth(2); r.setFillPoints(true); } setChartSettings(renderer, "Weather data", "Month", "Temperature", -1, 12.5, 0, 40, Color.LTGRAY, Color.LTGRAY); renderer.setXLabels(12); renderer.setYLabels(10); renderer.setShowGrid(true); renderer.setXLabelsAlign(Align.RIGHT); renderer.setYLabelsAlign(Align.RIGHT); renderer.setZoomButtonsVisible(true); renderer.setPanLimits(new double[] { -10, 20, -10, 40 }); renderer.setZoomLimits(new double[] { -10, 20, -10, 40 }); XYValueSeries sunSeries = new XYValueSeries("Sunshine hours"); sunSeries.add(0.5, 17); sunSeries.add(1.5, 18); sunSeries.add(2.5, 19); sunSeries.add(3.5, 19); sunSeries.add(4.5, 20.8); sunSeries.add(5.5, 24.9); sunSeries.add(6.5, 26); sunSeries.add(7.5, 27.8); sunSeries.add(8.5, 28.4); sunSeries.add(9.5, 25.5); sunSeries.add(10.5, 23.5); sunSeries.add(11.5, 19.5); XYSeriesRenderer lightRenderer = new XYSeriesRenderer(); lightRenderer.setColor(Color.YELLOW); XYSeries waterSeries = new XYSeries("Water Temperature"); waterSeries.add(0.5, 16); waterSeries.add(1.5, 15); waterSeries.add(2.5, 16); waterSeries.add(3.5, 17); waterSeries.add(4.5, 20); waterSeries.add(5.5, 23); waterSeries.add(6.5, 25); waterSeries.add(7.5, 25.5); waterSeries.add(8.5, 26.5); waterSeries.add(9.5, 24); waterSeries.add(10.5, 22); waterSeries.add(11.5, 18); renderer.setBarSpacing(2); renderer.setBarWidth(2); XYSeriesRenderer waterRenderer = new XYSeriesRenderer(); waterRenderer.setColor(Color.argb(250, 0, 210, 250)); XYMultipleSeriesDataset dataset = buildDataset(titles, x, values); dataset.addSeries(0, sunSeries); dataset.addSeries(1, waterSeries); renderer.setBarWidth(0.5f); renderer.addSeriesRenderer(lightRenderer); renderer.addSeriesRenderer(waterRenderer); waterRenderer.setDisplayChartValues(true); waterRenderer.setChartValuesTextSize(25); lightRenderer.setDisplayChartValues(true); lightRenderer.setChartValuesTextSize(25); String[] types = new String[] { BarChart.TYPE, BarChart.TYPE, BarChart.TYPE, BarChart.TYPE }; Intent intent = ChartFactory.getCombinedXYChartIntent(context, dataset, renderer, types, "Weather parameters"); return intent; } }
Espero que alguien todavía necesite esto, se tarda un tiempo entenderlo. Desafortunadamente, no tengo los puntos para pegar una imagen.