Are multiple stacked charts possible using Achartengine?

I tried to add another set of values ​​to the demo with folded histograms with achartangenin , but the new values ​​I entered do not appear on the graph. Is the stacking bar limited to two bars?

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); } 
+4
source share
2 answers

There is a misunderstanding in how AChartEngine displays summary histograms. In fact, they do not stack them, but display them on top of each other. This means that you will always want to add large values ​​first, and then less and so on, since it displays the first series, the second over the first, etc.

UPDATE: Starting from version 1.2.0, there are new tables with HEAP tables that display as you need.

+4
source

I did not find a good answer. However, you can use getCombinedXYChartIntent to create multiple stack bars.

I am using CombinedTemperatureChart as a template and modified to achieve this.

The raw source code is

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

I hope someone still needs this, it will take some time. Unfortunately, I have no points to insert an image.

0
source

All Articles