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

来源:互联网 发布:曲阜党政网络问政平台 编辑:程序博客网 时间:2024/05/02 04:19

本文将关注用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

0 0
原创粉丝点击