应用achartengine画数据统计图之 画TimeChart

本文将关注用achartengine包画出数据统计图(折线图+饼图)

上图是使用achartengine画图的思路,从我的理解来说共需要两部分东西:

1.第一部分是数据相关(即图中XYSeries和XYMutipleSeriesDataset部分)。

XYseries是为XYchart封装内部数据,可以看成一系列坐标点(TimeChart中是Timeseries) 。要把你所要用来画图的数据存入这些结构中,并且要根据你所画的图的类型不同,将数据整理成特定的格式,例如若要画TimeChart,它的横轴所需的时间数据:年,月,日,时 都是有规定的。

2.第二部分是画图设置(即图中XYMutilpleSeriesRenderer和XYSeriesRenderer部分)。主要是设置所画统计图的线的颜色、点的形状、是否显示数据等等。

ChartFactory官方解释是“Utility methods for creating chart views or intents”,我的理解就是“画图的工厂”,你只需把以上两部分输入完成,ChartFactory就会完成剩下的画图工作。

因此,我们的主要任务就是琢磨怎么放数据+怎么进行图形设置

 

一 画TimeChart(横坐标是日期时间的折线图

下面是生成数据集(Dataset)的函数。titles中的每个元素是一条线的名字(titles中有几个元素就要画几条线);xValues是Date类型的链表,其元素作为横坐标——日期时间;yValues是double类型的链表,其元素作为纵坐标——对应日期的数据。

复制代码
 1 protected XYMultipleSeriesDataset buildDateDataset(String[] titles, List xValues,
 2               List<double[]> yValues) {
 3             XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
 4             int length = titles.length;
 5             for (int i = 0; i < length; i++) {
 6               TimeSeries series = new TimeSeries(titles[i]);
 7               Date[] xV = xValues.get(i);      //画TimeChart横坐标需要为Date数据类型
 8               double[] yV = yValues.get(i);
 9               int seriesLength = xV.length;
10               for (int k = 0; k < seriesLength; k++) {
11                 series.add(xV[k], yV[k]);
12               }
13               dataset.addSeries(series);
14             }
15             return dataset;
16           }
复制代码

之后是生成XYMutilpleSeriesRenderer,即进行图形设置的函数。colors[]是线相应的颜色,PointStyle[]是点的风格,如Circle,Square等。

复制代码
 1 protected XYMultipleSeriesRenderer buildRenderer(int[] colors, PointStyle[] styles) {
 2         XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
 3         renderer.setAxisTitleTextSize(16); //各种设置。。。。
 4         renderer.setChartTitleTextSize(15);
 5         renderer.setLabelsTextSize(15);
 6         renderer.setLegendTextSize(15);
 7         renderer.setPointSize(7f);
 8         renderer.setMargins(new int[] { 40, 30, 15, 0 });  //设置图形四周的留白
 9         int length = colors.length;
10         for (int i = 0; i < length; i++) {
11           XYSeriesRenderer r = new XYSeriesRenderer();
12           r.setColor(colors[i]);
13           r.setPointStyle(styles[i]);
14           renderer.addSeriesRenderer(r);
15         }
16         return renderer;
17       }
复制代码

把数据都收集好之后,就可以画图了,下面是画图的代码。GraphicalView是一个View对象,getTimeChartView()函数得到一个这样的对象。

复制代码
1 private GraphicalView mChartView;   
2         mChartView = ChartFactory.getTimeChartView(this,buildDateDataset(titles, dateList, values),
3         renderer, "M/d HH:mm");
4         layout.removeAllViews();   //先remove再add可以实现统计图更新
5 6         layout.addView(mChartView, new LayoutParams(LayoutParams.FILL_PARENT,
7         LayoutParams.FILL_PARENT));
复制代码

以上,就画出了TimeChart,截图如下:

你可能感兴趣的:(Android)