應用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,截圖如下:

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM