使用 Achartengine 的动态折线图不起作用
Dynamic line chart using Achartengine is not working
我正在使用 Achartengine 制作动态折线图,这是处理静态数据但不处理动态数据 data.Actual,计划和月份是 dynamic.I 想根据以下值创建折线图实际、计划和 month.I 正在使用以下代码。
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
我在做了一些事情后自己解决了我的问题 research.The 问题是 UI 更新 problem.Once 绘制了图表然后对于新数据我们必须删除该视图并且应该创建新的基于 data.Below 的图表视图是工作代码。
private void drawChart() {
// Creating an XYSeries for Income
XYSeries actualSeries = new XYSeries("Actual");
// Creating an XYSeries for Expense<br />
XYSeries planSeries = new XYSeries("Plan");
XYSeries cupOneSeries = new XYSeries("Cup1");
XYSeries cupTwoSeries = new XYSeries("Cup2");
XYSeries cupThreeSeries = new XYSeries("Cup3");
// Adding data to Income and Expense Series
Log.e("x axis value in curve", "" + xAxisValueList.size());
Log.e("size of Actual", actualList.size() + "");
Log.e("size of plan", planList.size() + "");
for (int i = 0; i < actualList.size(); i++) {
actualSeries.add(i, Math.round(Double.parseDouble(actualList.get(i))));
planSeries.add(i, Math.round(Double.parseDouble(planList.get(i))));
cupOneSeries.add(i, Math.round(Double.parseDouble(cupOneList.get(i))));
cupTwoSeries.add(i, Math.round(Double.parseDouble(cupTwoList.get(i))));
cupThreeSeries.add(i, Math.round(Double.parseDouble(cupThreeList.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);
xyMultipleSeriesDataset.addSeries(cupOneSeries);
xyMultipleSeriesDataset.addSeries(cupTwoSeries);
xyMultipleSeriesDataset.addSeries(cupThreeSeries);
XYSeriesRenderer actualRenderer = new XYSeriesRenderer();
actualRenderer.setColor(getActivity().getResources().getColor(R.color.logo_blue));
actualRenderer.setPointStyle(PointStyle.CIRCLE);
actualRenderer.setFillPoints(true);
actualRenderer.setLineWidth(2);
actualRenderer.setDisplayChartValues(true);
// Creating XYSeriesRenderer to customize expenseSeries
XYSeriesRenderer planRenderer = new XYSeriesRenderer();
planRenderer.setColor(getActivity().getResources().getColor(R.color.logo_orange));
planRenderer.setPointStyle(PointStyle.CIRCLE);
planRenderer.setFillPoints(true);
planRenderer.setLineWidth(2);
planRenderer.setDisplayChartValues(true);
XYSeriesRenderer cupOneRenderer = new XYSeriesRenderer();
cupOneRenderer.setColor(getActivity().getResources().getColor(R.color.black));
cupOneRenderer.setPointStyle(PointStyle.CIRCLE);
cupOneRenderer.setFillPoints(true);
cupOneRenderer.setLineWidth(2);
cupOneRenderer.setDisplayChartValues(true);
XYSeriesRenderer cupTwoRenderer = new XYSeriesRenderer();
cupTwoRenderer.setColor(getActivity().getResources().getColor(R.color.green));
cupTwoRenderer.setPointStyle(PointStyle.CIRCLE);
cupTwoRenderer.setFillPoints(true);
cupTwoRenderer.setLineWidth(2);
cupTwoRenderer.setDisplayChartValues(true);
XYSeriesRenderer cupThreeRenderer = new XYSeriesRenderer();
cupThreeRenderer.setColor(Color.parseColor("#0D8ECF"));
cupThreeRenderer.setPointStyle(PointStyle.CIRCLE);
cupThreeRenderer.setFillPoints(true);
cupThreeRenderer.setLineWidth(2);
cupThreeRenderer.setDisplayChartValues(true);
// Creating a XYMultipleSeriesRenderer to customize the whole chart<br />
XYMultipleSeriesRenderer multiRenderer = new XYMultipleSeriesRenderer();
multiRenderer.setApplyBackgroundColor(true);
multiRenderer.setBackgroundColor(Color.WHITE);
multiRenderer.setMarginsColor(Color.WHITE);
multiRenderer.setLabelsColor(Color.RED);
multiRenderer.setPanEnabled(true,false);
/* multiRenderer.setLabelsTextSize(getActivity().getResources().getDimensionPixelSize(R.dimen.sp_9));
multiRenderer.setLegendTextSize(getActivity().getResources().getDimensionPixelSize(R.dimen.sp_9));
*/ multiRenderer.setChartValuesTextSize(getActivity().getResources().getDimensionPixelSize(R.dimen.sp_9));
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);
multiRenderer.setZoomEnabled(true);
for (int i = 0; i < monthList.size(); i++) {
multiRenderer.addXTextLabel(i, monthList.get(i).toString());
}
multiRenderer.addSeriesRenderer(actualRenderer);
multiRenderer.addSeriesRenderer(planRenderer);
multiRenderer.addSeriesRenderer(cupOneRenderer);
multiRenderer.addSeriesRenderer(cupTwoRenderer);
multiRenderer.addSeriesRenderer(cupThreeRenderer);
Log.e("size of actual log",actualList.size()+"");
LinearLayout chartContainer = (LinearLayout) mView.findViewById(R.id.chart_container);
if (monthList.size() > 0) {
// Getting a reference to LinearLayout of the MainActivity Layout<br />
chartContainer.removeAllViews();
//drawing bar chart<br />
chart = ChartFactory.getLineChartView(getActivity(), xyMultipleSeriesDataset, multiRenderer);
//adding the view to the linearlayout<br />
chartContainer.addView(chart);
} else {
chartContainer.removeAllViews();
CustomToast.initToast(getActivity(),"No data available for S-curve");
}
}
我正在使用 Achartengine 制作动态折线图,这是处理静态数据但不处理动态数据 data.Actual,计划和月份是 dynamic.I 想根据以下值创建折线图实际、计划和 month.I 正在使用以下代码。
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
我在做了一些事情后自己解决了我的问题 research.The 问题是 UI 更新 problem.Once 绘制了图表然后对于新数据我们必须删除该视图并且应该创建新的基于 data.Below 的图表视图是工作代码。
private void drawChart() {
// Creating an XYSeries for Income
XYSeries actualSeries = new XYSeries("Actual");
// Creating an XYSeries for Expense<br />
XYSeries planSeries = new XYSeries("Plan");
XYSeries cupOneSeries = new XYSeries("Cup1");
XYSeries cupTwoSeries = new XYSeries("Cup2");
XYSeries cupThreeSeries = new XYSeries("Cup3");
// Adding data to Income and Expense Series
Log.e("x axis value in curve", "" + xAxisValueList.size());
Log.e("size of Actual", actualList.size() + "");
Log.e("size of plan", planList.size() + "");
for (int i = 0; i < actualList.size(); i++) {
actualSeries.add(i, Math.round(Double.parseDouble(actualList.get(i))));
planSeries.add(i, Math.round(Double.parseDouble(planList.get(i))));
cupOneSeries.add(i, Math.round(Double.parseDouble(cupOneList.get(i))));
cupTwoSeries.add(i, Math.round(Double.parseDouble(cupTwoList.get(i))));
cupThreeSeries.add(i, Math.round(Double.parseDouble(cupThreeList.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);
xyMultipleSeriesDataset.addSeries(cupOneSeries);
xyMultipleSeriesDataset.addSeries(cupTwoSeries);
xyMultipleSeriesDataset.addSeries(cupThreeSeries);
XYSeriesRenderer actualRenderer = new XYSeriesRenderer();
actualRenderer.setColor(getActivity().getResources().getColor(R.color.logo_blue));
actualRenderer.setPointStyle(PointStyle.CIRCLE);
actualRenderer.setFillPoints(true);
actualRenderer.setLineWidth(2);
actualRenderer.setDisplayChartValues(true);
// Creating XYSeriesRenderer to customize expenseSeries
XYSeriesRenderer planRenderer = new XYSeriesRenderer();
planRenderer.setColor(getActivity().getResources().getColor(R.color.logo_orange));
planRenderer.setPointStyle(PointStyle.CIRCLE);
planRenderer.setFillPoints(true);
planRenderer.setLineWidth(2);
planRenderer.setDisplayChartValues(true);
XYSeriesRenderer cupOneRenderer = new XYSeriesRenderer();
cupOneRenderer.setColor(getActivity().getResources().getColor(R.color.black));
cupOneRenderer.setPointStyle(PointStyle.CIRCLE);
cupOneRenderer.setFillPoints(true);
cupOneRenderer.setLineWidth(2);
cupOneRenderer.setDisplayChartValues(true);
XYSeriesRenderer cupTwoRenderer = new XYSeriesRenderer();
cupTwoRenderer.setColor(getActivity().getResources().getColor(R.color.green));
cupTwoRenderer.setPointStyle(PointStyle.CIRCLE);
cupTwoRenderer.setFillPoints(true);
cupTwoRenderer.setLineWidth(2);
cupTwoRenderer.setDisplayChartValues(true);
XYSeriesRenderer cupThreeRenderer = new XYSeriesRenderer();
cupThreeRenderer.setColor(Color.parseColor("#0D8ECF"));
cupThreeRenderer.setPointStyle(PointStyle.CIRCLE);
cupThreeRenderer.setFillPoints(true);
cupThreeRenderer.setLineWidth(2);
cupThreeRenderer.setDisplayChartValues(true);
// Creating a XYMultipleSeriesRenderer to customize the whole chart<br />
XYMultipleSeriesRenderer multiRenderer = new XYMultipleSeriesRenderer();
multiRenderer.setApplyBackgroundColor(true);
multiRenderer.setBackgroundColor(Color.WHITE);
multiRenderer.setMarginsColor(Color.WHITE);
multiRenderer.setLabelsColor(Color.RED);
multiRenderer.setPanEnabled(true,false);
/* multiRenderer.setLabelsTextSize(getActivity().getResources().getDimensionPixelSize(R.dimen.sp_9));
multiRenderer.setLegendTextSize(getActivity().getResources().getDimensionPixelSize(R.dimen.sp_9));
*/ multiRenderer.setChartValuesTextSize(getActivity().getResources().getDimensionPixelSize(R.dimen.sp_9));
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);
multiRenderer.setZoomEnabled(true);
for (int i = 0; i < monthList.size(); i++) {
multiRenderer.addXTextLabel(i, monthList.get(i).toString());
}
multiRenderer.addSeriesRenderer(actualRenderer);
multiRenderer.addSeriesRenderer(planRenderer);
multiRenderer.addSeriesRenderer(cupOneRenderer);
multiRenderer.addSeriesRenderer(cupTwoRenderer);
multiRenderer.addSeriesRenderer(cupThreeRenderer);
Log.e("size of actual log",actualList.size()+"");
LinearLayout chartContainer = (LinearLayout) mView.findViewById(R.id.chart_container);
if (monthList.size() > 0) {
// Getting a reference to LinearLayout of the MainActivity Layout<br />
chartContainer.removeAllViews();
//drawing bar chart<br />
chart = ChartFactory.getLineChartView(getActivity(), xyMultipleSeriesDataset, multiRenderer);
//adding the view to the linearlayout<br />
chartContainer.addView(chart);
} else {
chartContainer.removeAllViews();
CustomToast.initToast(getActivity(),"No data available for S-curve");
}
}