您的位置:首页 > 其它

应用achartengine包画数据统计图之一————基础介绍及画TimeChart

2016-10-19 10:21 281 查看
本文将关注用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<Date[]> 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,截图如下:



转载http://www.cnblogs.com/water-drop/archive/2012/11/01/2750379.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: