I am making dynamic line chart using Achartengine and this is working on static data but not working on dynamic data.Actual,plan and month is dynamic.I want to create line chart based on the values of actual,plan and month.I am using below code.
private void drawChart() {
XYSeries actualSeries = new XYSeries("Actual");
// Creating an XYSeries for Expense<br />
XYSeries planSeries = new XYSeries("Plan");
// Adding data to Income and Expense Series
for (int i = 0; i <actualList.size; i++) {
actualSeries.add(i,Double.parseDouble(actualList.get(i)));
planSeries.add(i,Double.parseDouble(planList.get(i)));
}
// Creating a dataset to hold each series
XYMultipleSeriesDataset xyMultipleSeriesDataset = new XYMultipleSeriesDataset();
// Adding Income Series to the dataset
xyMultipleSeriesDataset.addSeries(actualSeries);
// Adding Expense Series to dataset
xyMultipleSeriesDataset.addSeries(planSeries);
XYSeriesRenderer actualRenderer = new XYSeriesRenderer();
actualRenderer.setColor(Color.GREEN);
actualRenderer.setPointStyle(PointStyle.CIRCLE);
actualRenderer.setFillPoints(true);
actualRenderer.setLineWidth(2);
actualRenderer.setDisplayChartValues(true);
// Creating XYSeriesRenderer to customize expenseSeries
XYSeriesRenderer planRenderer = new XYSeriesRenderer();
planRenderer.setColor(Color.RED);
planRenderer.setPointStyle(PointStyle.CIRCLE);
planRenderer.setFillPoints(true);
planRenderer.setLineWidth(2);
planRenderer.setDisplayChartValues(true);
XYMultipleSeriesRenderer multiRenderer = new XYMultipleSeriesRenderer();
multiRenderer.setApplyBackgroundColor(true);
multiRenderer.setBackgroundColor(Color.WHITE);
multiRenderer.setMarginsColor(Color.WHITE);
multiRenderer.setLabelsColor(Color.RED);
multiRenderer.setPanEnabled(false, false);
/* multiRenderer.setYLabels(5);
multiRenderer.setXLabels(1);
*/ multiRenderer.setXLabelsColor(Color.BLACK);
multiRenderer.setYLabelsColor(0, Color.BLACK);
//* multiRenderer.setShowGridX(true);
//multiRenderer.setShowGridY(true)
multiRenderer.setGridColor(Color.BLACK);
multiRenderer.setChartTitle("Plan vs Actual Curve");
multiRenderer.setXTitle("Months");
multiRenderer.setYTitle("plan/actual");
multiRenderer.setZoomButtonsVisible(false);
for (int i = 0; i < monthList.size(); i++) {
multiRenderer.addXTextLabel(i + 1, monthList.get(i).toString());
}
multiRenderer.addSeriesRenderer(actualRenderer);
multiRenderer.addSeriesRenderer(planRenderer);
// Getting a reference to LinearLayout of the MainActivity Layout<br />
LinearLayout chartContainer = (LinearLayout) mView.findViewById(R.id.chart_container);
// Creating a Line Chart<br />
GraphicalView chart = ChartFactory.getLineChartView(getActivity(), xyMultipleSeriesDataset, multiRenderer);
chartContainer.addView(chart);
if (chart != null) {
chartContainer.removeView(chart);
chart.repaint();
}
}
Thanks in advance
I have solved my question myself after doing some research.The problem was UI update problem.Once the chart is plotted then for new data we have to remove that view and should create new chart view based on data.Below is the working code.