Muscle
Muscle

Reputation: 1

Android Dynamic Chart

I refer to the answer by @Caroilik Android Dynamic Chart on plotting a graph with Achartengine. I'm trying to plot three lines using the code he provided, but can't seem to figure out how to do that. Can anyone help? Thanks.

Upvotes: 0

Views: 997

Answers (1)

Erik Lindholm
Erik Lindholm

Reputation: 81

You have to add two more timeSeries to the dataset. You have to solve some race conditions by moving some instantiations.

The dataset and renderer where already for multiple series.

import java.util.Date;
import java.util.Random;

import org.achartengine.ChartFactory;
import org.achartengine.GraphicalView;
import org.achartengine.chart.PointStyle;
import org.achartengine.model.TimeSeries;
import org.achartengine.model.XYMultipleSeriesDataset;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.achartengine.renderer.XYSeriesRenderer;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;

public class ThreeTimeChart extends Activity {

    private static Random random = new Random();

    private static TimeSeries[] timeSeries;
    private static XYMultipleSeriesDataset dataset;
    private static XYMultipleSeriesRenderer renderer;
    private static XYSeriesRenderer rendererSeries;
    private static GraphicalView view;
    private static Thread mThread;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);     

        dataset = new XYMultipleSeriesDataset();

        renderer = new XYMultipleSeriesRenderer();
        renderer.setAxesColor(Color.BLUE);
        renderer.setAxisTitleTextSize(16);
        renderer.setChartTitle("Time");
        renderer.setChartTitleTextSize(15);
        renderer.setFitLegend(true);
        renderer.setGridColor(Color.LTGRAY);
        renderer.setPanEnabled(true, true);
        renderer.setPointSize(10);
        renderer.setXTitle("Time");
        renderer.setYTitle("Number");
        renderer.setMargins( new int []{20, 30, 15, 0});
        renderer.setZoomButtonsVisible(true);
        renderer.setBarSpacing(10);
        renderer.setShowGrid(true);


        rendererSeries = new XYSeriesRenderer();
        rendererSeries.setColor(Color.RED);
        rendererSeries.setFillPoints(true);
        rendererSeries.setPointStyle(PointStyle.CIRCLE);
        renderer.addSeriesRenderer(rendererSeries);
        rendererSeries = new XYSeriesRenderer();
        rendererSeries.setColor(Color.BLUE);
        rendererSeries.setFillPoints(true);
        rendererSeries.setPointStyle(PointStyle.CIRCLE);
        renderer.addSeriesRenderer(rendererSeries);
        rendererSeries = new XYSeriesRenderer();
        rendererSeries.setColor(Color.YELLOW);
        rendererSeries.setFillPoints(true);
        rendererSeries.setPointStyle(PointStyle.CIRCLE);
        renderer.addSeriesRenderer(rendererSeries);

        timeSeries = new TimeSeries[3];
        timeSeries[0] = new TimeSeries("Random 0");
        timeSeries[1] = new TimeSeries("Random 1");
        timeSeries[2] = new TimeSeries("Random 2");
        timeSeries[0].add(new Date(), random.nextInt(10));
        timeSeries[1].add(new Date(), random.nextInt(10));
        timeSeries[2].add(new Date(), random.nextInt(10));
    }

    @Override
    protected void onStart() {
        super.onStart();
        dataset.addSeries(timeSeries[0]);
        dataset.addSeries(timeSeries[1]);
        dataset.addSeries(timeSeries[2]);
        view = ChartFactory.getTimeChartView(this, dataset, renderer, "Test");
        view.refreshDrawableState();
        view.repaint();
        setContentView(view);
        mThread = new Thread(){
            public void run(){
                while(true){
                try {
                    Thread.sleep(2000L);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                    timeSeries[0].add(new Date(), random.nextInt(10));
                    timeSeries[1].add(new Date(), random.nextInt(10));
                    timeSeries[2].add(new Date(), random.nextInt(10));
                    view.repaint();
                }
            }
        };
        mThread.start();
    }
}

Upvotes: 1

Related Questions