2012-08-08 2 views
4

stacked bar charts with achartengine 데모 예제에 다른 값 집합을 추가하려고 시도했지만 나에게 소개 된 새 값이 차트에 나타나지 않습니다. 스태킹 막대는 두 개의 막대로 제한됩니까?Achartengine을 사용하여 여러 개의 가로 막 대형 차트를 사용할 수 있습니까?

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

AChartEngine에서 누적 막 대형 차트를 표시하는 방식에 오해가 있습니다. 그것은 실제로 그것들을 쌓아 두지 않지만 그것들을 하나씩 다른 것 위에 표시합니다. 즉, 첫 번째 시리즈를 렌더링 할 때 더 큰 값을 먼저 추가하고, 첫 번째 시리즈를 렌더링 할 때 더 큰 값을 먼저 추가하는 등 더 큰 값을 항상 추가하려는 것입니다.

업데이트 : 버전 1.2.0부터 새로운 방식의 스택 막대 차트 HEAP이 필요하며 원하는 방식으로 표시됩니다.

+0

감사합니다. AChartEngine에 괜찮은 위키/튜토리얼이 있다면 좋을 것입니다 ... – adfsafa

+0

Dan이 제공 한 링크가 죽었습니다. –

+0

@AleksandraZalcman 어떤 링크가 있습니까? –

0

좋은 답변을 찾을 수 없습니다. 그러나 getCombinedXYChartIntent 을 사용하여 여러 개의 스택 막대를 만들 수 있습니다.

이 템플릿을 사용하여 CombinedTemperatureChart를 템플릿으로 사용하고이를 수정했습니다.

초기 원시 코드는

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

} 

나는 누군가가 여전히 필요, 그것은 시간이 그림을 꺼내 희망입니다. 불행히도 이미지를 붙여 넣을 포인트가 없습니다.