Reputation: 109
I am unable to plot multiple series in achartengine. If I add a second series to the dataset, then it just doesn't work, it crashes actually. With only one series added to the dataset, the code works fine.
Debugging shows, that it crashes when here when doing this : ChartFactory.getLineChartView(context, dataset, seriesRenderer);
Here is the code snippet, any help would be greatly appreciated.
public class LineGraph {
public View getView(Context context) {
int x[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
int y[] = {30,34,25,45,5,30,20,25,29,30,10,20,30,40,50,60,70,60,50,40};
TimeSeries series = new TimeSeries("Scores");
TimeSeries lineSeries = new TimeSeries("Line");
for(int i=0;i<x.length;i++) {
series.add(x[i], y[i]);
series.addAnnotation(i + "", x[i], y[i]+5);
lineSeries.add(x[i], y[i]+10);
}
XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
dataset.addSeries(series);
dataset.addSeries(lineSeries);
XYSeriesRenderer renderer = new XYSeriesRenderer();
renderer.setPointStyle(PointStyle.CIRCLE);
renderer.setFillPoints(true);
renderer.setColor(Color.WHITE);
renderer.setLineWidth(2f);
XYMultipleSeriesRenderer seriesRenderer = new XYMultipleSeriesRenderer();
seriesRenderer.addSeriesRenderer(renderer);
seriesRenderer.setShowAxes(false); // show both axes
seriesRenderer.setShowLegend(false);
seriesRenderer.setShowLabels(false);
seriesRenderer.setZoomButtonsVisible(false); // bye bye zoom
//seriesRenderer.setMargins(new int[] {1, 1, 1, 10});
seriesRenderer.setXAxisMin(0);
seriesRenderer.setXAxisMax(10);
seriesRenderer.setTextTypeface(Typeface.createFromAsset(context.getAssets(), "fonts/Lifestyle Rounded M54.ttf"));
seriesRenderer.setPointSize(10f);
seriesRenderer.setPanEnabled(true, false);
seriesRenderer.setGridColor(Color.GRAY);
View view = ChartFactory.getLineChartView(context, dataset, seriesRenderer);
return view;
}
}
And here is how I am using it :
public class PerformanceActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_performance);
Utils.overrideFonts(this, findViewById(android.R.id.content));
LineGraph lineGraph = new LineGraph();
View graphView = lineGraph.getView(getApplicationContext());
RelativeLayout graphHolder = (RelativeLayout)findViewById(R.id.rl_graph);
graphHolder.addView(graphView);
}
Upvotes: 1
Views: 1878
Reputation: 133560
You are missing second renderer.
public class LineGraph {
public Intent getIntent(Context context)
{
int x[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
int y[] = {30,34,25,45,5,30,20,25,29,30,10,20,30,40,50,60,70,60,50,40};
TimeSeries series = new TimeSeries("Scores");
TimeSeries lineSeries = new TimeSeries("Line");
for(int i=0;i<x.length;i++) {
series.add(x[i], y[i]);
//series.addAnnotation(i + "", x[i], y[i]+5);
lineSeries.add(x[i], y[i]+10);
}
XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
dataset.addSeries(series);
dataset.addSeries(lineSeries);
XYSeriesRenderer renderer = new XYSeriesRenderer();
renderer.setPointStyle(PointStyle.CIRCLE);
renderer.setFillPoints(true);
renderer.setColor(Color.BLACK);
renderer.setLineWidth(2f);
XYSeriesRenderer renderer2= new XYSeriesRenderer();//renderer for 2
// missing renderer 2
renderer2.setColor(Color.GREEN);
renderer2.setFillPoints(true);
//renderer2.setChartValuesSpacing(1f);
renderer.setLineWidth(2f);
XYMultipleSeriesRenderer seriesRenderer = new XYMultipleSeriesRenderer();
seriesRenderer.addSeriesRenderer(renderer);
seriesRenderer.addSeriesRenderer(renderer2);
seriesRenderer.setShowAxes(false); // show both axes
seriesRenderer.setShowLegend(false);
seriesRenderer.setShowLabels(false);
seriesRenderer.setZoomButtonsVisible(false);
Intent intent= ChartFactory.getLineChartIntent(context, dataset, seriesRenderer);
return intent;
}
}
snap shot
Edit:
XYMultipleSeriesRenderer seriesRenderer = new XYMultipleSeriesRenderer();
seriesRenderer.addSeriesRenderer(renderer);
seriesRenderer.addSeriesRenderer(renderer2);
seriesRenderer.setChartTitle("Line Graph");
seriesRenderer.setXTitle("X Values");
seriesRenderer.setYTitle("Y values");
seriesRenderer.setBarSpacing(10);
seriesRenderer.setZoomEnabled(true);
Upvotes: 7
Reputation: 40734
You need to add a series renderer for each series, you've only added a single renderer. Add a 2nd and you should be good to go.
Upvotes: 3