應用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<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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章