Android统计图表MPAndroidChart

来源:互联网 发布:软件开发咨询 编辑:程序博客网 时间:2024/05/04 15:36

http://blog.csdn.net/zhangphil/article/details/47656521



Android统计图表MPAndroidChart

MPAndroidChart是在Android平台上开源的第三方统计图表库,可以绘制样式复杂、丰富的各种统计图表,如一般常见的折线图、饼状图、柱状图、散点图、金融股票中使用的的“蜡烛”图、“泡泡”统计图、雷达状统计饼状图等等。简言之,AndroidMPChart基本上可以满足日常在Android平台上的统计图表开发需要。
AndroidMPChart在github上的项目主页: https://github.com/PhilJay/MPAndroidChart 
在自己的项目的libs中,导入其发布的jar包即可使用MPAndroidChart。MPAndroidChart发布的jar包页面在:https://github.com/PhilJay/MPAndroidChart/releases 
AndroidMPChart使用方法:在上面的releases页面下载最新的jar包,复制到自己的项目libs中即可使用。如图:


注:写作本文是基于MPAndroidChart的版本:mpandroidchartlibrary-2-1-3.jar


现在,先做一个基础的AndroidMPChart折线图,折线图在平时的统计图表中应用最多,AndroidMPChart提供了丰富的功能给予支持。

效果图如下:


现给出实现上述统计图表的全部代码。

MainActivity.Java的代码:

[java] view plain copy
  1. package zhangphil.linechart;  
  2.   
  3. import java.util.ArrayList;  
  4.   
  5. import com.github.mikephil.charting.charts.LineChart;  
  6. import com.github.mikephil.charting.components.Legend;  
  7. import com.github.mikephil.charting.components.Legend.LegendForm;  
  8. import com.github.mikephil.charting.components.Legend.LegendPosition;  
  9. import com.github.mikephil.charting.data.Entry;  
  10. import com.github.mikephil.charting.data.LineData;  
  11. import com.github.mikephil.charting.data.LineDataSet;  
  12. import com.github.mikephil.charting.utils.ValueFormatter;  
  13.   
  14. import android.support.v7.app.ActionBarActivity;  
  15. import android.graphics.Color;  
  16. import android.os.Bundle;  
  17.   
  18. public class MainActivity extends ActionBarActivity {  
  19.   
  20.     @Override  
  21.     protected void onCreate(Bundle savedInstanceState) {  
  22.         super.onCreate(savedInstanceState);  
  23.         setContentView(R.layout.activity_main);  
  24.   
  25.         LineChart chart = (LineChart) findViewById(R.id.chart);  
  26.   
  27.         // 制作7个数据点(沿x坐标轴)  
  28.         LineData mLineData = makeLineData(7);  
  29.         setChartStyle(chart, mLineData, Color.WHITE);  
  30.     }  
  31.   
  32.     // 设置chart显示的样式  
  33.     private void setChartStyle(LineChart mLineChart, LineData lineData,  
  34.             int color) {  
  35.         // 是否在折线图上添加边框  
  36.         mLineChart.setDrawBorders(false);  
  37.   
  38.         mLineChart.setDescription("描述@ZhangPhil");// 数据描述  
  39.   
  40.         // 如果没有数据的时候,会显示这个,类似listview的emtpyview  
  41.         mLineChart  
  42.                 .setNoDataTextDescription("如果传给MPAndroidChart的数据为空,那么你将看到这段文字。@Zhang Phil");  
  43.   
  44.         // 是否绘制背景颜色。  
  45.         // 如果mLineChart.setDrawGridBackground(false),  
  46.         // 那么mLineChart.setGridBackgroundColor(Color.CYAN)将失效;  
  47.         mLineChart.setDrawGridBackground(false);  
  48.         mLineChart.setGridBackgroundColor(Color.CYAN);  
  49.   
  50.         // 触摸  
  51.         mLineChart.setTouchEnabled(true);  
  52.   
  53.         // 拖拽  
  54.         mLineChart.setDragEnabled(true);  
  55.   
  56.         // 缩放  
  57.         mLineChart.setScaleEnabled(true);  
  58.   
  59.         mLineChart.setPinchZoom(false);  
  60.   
  61.         // 设置背景  
  62.         mLineChart.setBackgroundColor(color);  
  63.   
  64.         // 设置x,y轴的数据  
  65.         mLineChart.setData(lineData);  
  66.   
  67.         // 设置比例图标示,就是那个一组y的value的  
  68.         Legend mLegend = mLineChart.getLegend();  
  69.   
  70.         mLegend.setPosition(LegendPosition.BELOW_CHART_CENTER);  
  71.         mLegend.setForm(LegendForm.CIRCLE);// 样式  
  72.         mLegend.setFormSize(15.0f);// 字体  
  73.         mLegend.setTextColor(Color.BLUE);// 颜色  
  74.   
  75.         // 沿x轴动画,时间2000毫秒。  
  76.         mLineChart.animateX(2000);  
  77.     }  
  78.   
  79.     /** 
  80.      * @param count 
  81.      *            数据点的数量。 
  82.      * @return 
  83.      */  
  84.     private LineData makeLineData(int count) {  
  85.         ArrayList<String> x = new ArrayList<String>();  
  86.         for (int i = 0; i < count; i++) {  
  87.             // x轴显示的数据  
  88.             x.add("x:" + i);  
  89.         }  
  90.   
  91.         // y轴的数据  
  92.         ArrayList<Entry> y = new ArrayList<Entry>();  
  93.         for (int i = 0; i < count; i++) {  
  94.             float val = (float) (Math.random() * 100);  
  95.             Entry entry = new Entry(val, i);  
  96.             y.add(entry);  
  97.         }  
  98.   
  99.         // y轴数据集  
  100.         LineDataSet mLineDataSet = new LineDataSet(y, "测试数据集。by ZhangPhil");  
  101.   
  102.         // 用y轴的集合来设置参数  
  103.         // 线宽  
  104.         mLineDataSet.setLineWidth(3.0f);  
  105.   
  106.         // 显示的圆形大小  
  107.         mLineDataSet.setCircleSize(5.0f);  
  108.   
  109.         // 折线的颜色  
  110.         mLineDataSet.setColor(Color.DKGRAY);  
  111.   
  112.         // 圆球的颜色  
  113.         mLineDataSet.setCircleColor(Color.GREEN);  
  114.   
  115.         // 设置mLineDataSet.setDrawHighlightIndicators(false)后,  
  116.         // Highlight的十字交叉的纵横线将不会显示,  
  117.         // 同时,mLineDataSet.setHighLightColor(Color.CYAN)失效。  
  118.         mLineDataSet.setDrawHighlightIndicators(true);  
  119.   
  120.         // 按击后,十字交叉线的颜色  
  121.         mLineDataSet.setHighLightColor(Color.CYAN);  
  122.   
  123.         // 设置这项上显示的数据点的字体大小。  
  124.         mLineDataSet.setValueTextSize(10.0f);  
  125.   
  126.         // mLineDataSet.setDrawCircleHole(true);  
  127.   
  128.         // 改变折线样式,用曲线。  
  129.         // mLineDataSet.setDrawCubic(true);  
  130.         // 默认是直线  
  131.         // 曲线的平滑度,值越大越平滑。  
  132.         // mLineDataSet.setCubicIntensity(0.2f);  
  133.   
  134.         // 填充曲线下方的区域,红色,半透明。  
  135.         // mLineDataSet.setDrawFilled(true);  
  136.         // mLineDataSet.setFillAlpha(128);  
  137.         // mLineDataSet.setFillColor(Color.RED);  
  138.   
  139.         // 填充折线上数据点、圆球里面包裹的中心空白处的颜色。  
  140.         mLineDataSet.setCircleColorHole(Color.YELLOW);  
  141.   
  142.         // 设置折线上显示数据的格式。如果不设置,将默认显示float数据格式。  
  143.         mLineDataSet.setValueFormatter(new ValueFormatter() {  
  144.   
  145.             @Override  
  146.             public String getFormattedValue(float value) {  
  147.                 int n = (int) value;  
  148.                 String s = "y:" + n;  
  149.                 return s;  
  150.             }  
  151.         });  
  152.   
  153.         ArrayList<LineDataSet> mLineDataSets = new ArrayList<LineDataSet>();  
  154.         mLineDataSets.add(mLineDataSet);  
  155.   
  156.         LineData mLineData = new LineData(x, mLineDataSets);  
  157.   
  158.         return mLineData;  
  159.     }  
  160. }  

MainActivity.java需要的activity_main.xml :

[html] view plain copy
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent" >  
  5.   
  6.     <com.github.mikephil.charting.charts.LineChart  
  7.         android:id="@+id/chart"  
  8.         android:layout_width="match_parent"  
  9.         android:layout_height="match_parent" />  
  10.       
  11. </RelativeLayout>  


MPAndroidChart提供了丰富的参数设计条件,可以设计样式丰富统计图表,比如在本例中,如果把注释掉的这段代码重新启用:

[java] view plain copy
  1. // 改变折线样式,用曲线。  
  2.         // mLineDataSet.setDrawCubic(true);  
  3.         // 默认是直线  
  4.         // 曲线的平滑度,值越大越平滑。  
  5.         // mLineDataSet.setCubicIntensity(0.2f);  
  6.   
  7.         // 填充曲线下方的区域,红色,半透明。  
  8.         // mLineDataSet.setDrawFilled(true);  
  9.         // mLineDataSet.setFillAlpha(128);  
  10.         // mLineDataSet.setFillColor(Color.RED);  


那么折线图的样式就变成这样:


6
0
 
 

  相关文章推荐

Android统计图表MPAndroidChart

MPAndroidChart是在Android平台上开源的第三方统计图表库,可以绘制样式复杂、丰富的各种统计图表,如一般常见的折线图、饼状图、柱状图、散点图、金融股票中使用的的“蜡烛”图、“泡泡”统计图、雷达状统计饼状图等等。简言之,AndroidMPChart基本上可以满足日常在Android平台上的统计图表开发需要。
AndroidMPChart在github上的项目主页: https://github.com/PhilJay/MPAndroidChart 
在自己的项目的libs中,导入其发布的jar包即可使用MPAndroidChart。MPAndroidChart发布的jar包页面在:https://github.com/PhilJay/MPAndroidChart/releases 
AndroidMPChart使用方法:在上面的releases页面下载最新的jar包,复制到自己的项目libs中即可使用。如图:


注:写作本文是基于MPAndroidChart的版本:mpandroidchartlibrary-2-1-3.jar


现在,先做一个基础的AndroidMPChart折线图,折线图在平时的统计图表中应用最多,AndroidMPChart提供了丰富的功能给予支持。

效果图如下:


现给出实现上述统计图表的全部代码。

MainActivity.Java的代码:

[java] view plain copy
  1. package zhangphil.linechart;  
  2.   
  3. import java.util.ArrayList;  
  4.   
  5. import com.github.mikephil.charting.charts.LineChart;  
  6. import com.github.mikephil.charting.components.Legend;  
  7. import com.github.mikephil.charting.components.Legend.LegendForm;  
  8. import com.github.mikephil.charting.components.Legend.LegendPosition;  
  9. import com.github.mikephil.charting.data.Entry;  
  10. import com.github.mikephil.charting.data.LineData;  
  11. import com.github.mikephil.charting.data.LineDataSet;  
  12. import com.github.mikephil.charting.utils.ValueFormatter;  
  13.   
  14. import android.support.v7.app.ActionBarActivity;  
  15. import android.graphics.Color;  
  16. import android.os.Bundle;  
  17.   
  18. public class MainActivity extends ActionBarActivity {  
  19.   
  20.     @Override  
  21.     protected void onCreate(Bundle savedInstanceState) {  
  22.         super.onCreate(savedInstanceState);  
  23.         setContentView(R.layout.activity_main);  
  24.   
  25.         LineChart chart = (LineChart) findViewById(R.id.chart);  
  26.   
  27.         // 制作7个数据点(沿x坐标轴)  
  28.         LineData mLineData = makeLineData(7);  
  29.         setChartStyle(chart, mLineData, Color.WHITE);  
  30.     }  
  31.   
  32.     // 设置chart显示的样式  
  33.     private void setChartStyle(LineChart mLineChart, LineData lineData,  
  34.             int color) {  
  35.         // 是否在折线图上添加边框  
  36.         mLineChart.setDrawBorders(false);  
  37.   
  38.         mLineChart.setDescription("描述@ZhangPhil");// 数据描述  
  39.   
  40.         // 如果没有数据的时候,会显示这个,类似listview的emtpyview  
  41.         mLineChart  
  42.                 .setNoDataTextDescription("如果传给MPAndroidChart的数据为空,那么你将看到这段文字。@Zhang Phil");  
  43.   
  44.         // 是否绘制背景颜色。  
  45.         // 如果mLineChart.setDrawGridBackground(false),  
  46.         // 那么mLineChart.setGridBackgroundColor(Color.CYAN)将失效;  
  47.         mLineChart.setDrawGridBackground(false);  
  48.         mLineChart.setGridBackgroundColor(Color.CYAN);  
  49.   
  50.         // 触摸  
  51.         mLineChart.setTouchEnabled(true);  
  52.   
  53.         // 拖拽  
  54.         mLineChart.setDragEnabled(true);  
  55.   
  56.         // 缩放  
  57.         mLineChart.setScaleEnabled(true);  
  58.   
  59.         mLineChart.setPinchZoom(false);  
  60.   
  61.         // 设置背景  
  62.         mLineChart.setBackgroundColor(color);  
  63.   
  64.         // 设置x,y轴的数据  
  65.         mLineChart.setData(lineData);  
  66.   
  67.         // 设置比例图标示,就是那个一组y的value的  
  68.         Legend mLegend = mLineChart.getLegend();  
  69.   
  70.         mLegend.setPosition(LegendPosition.BELOW_CHART_CENTER);  
  71.         mLegend.setForm(LegendForm.CIRCLE);// 样式  
  72.         mLegend.setFormSize(15.0f);// 字体  
  73.         mLegend.setTextColor(Color.BLUE);// 颜色  
  74.   
  75.         // 沿x轴动画,时间2000毫秒。  
  76.         mLineChart.animateX(2000);  
  77.     }  
  78.   
  79.     /** 
  80.      * @param count 
  81.      *            数据点的数量。 
  82.      * @return 
  83.      */  
  84.     private LineData makeLineData(int count) {  
  85.         ArrayList<String> x = new ArrayList<String>();  
  86.         for (int i = 0; i < count; i++) {  
  87.             // x轴显示的数据  
  88.             x.add("x:" + i);  
  89.         }  
  90.   
  91.         // y轴的数据  
  92.         ArrayList<Entry> y = new ArrayList<Entry>();  
  93.         for (int i = 0; i < count; i++) {  
  94.             float val = (float) (Math.random() * 100);  
  95.             Entry entry = new Entry(val, i);  
  96.             y.add(entry);  
  97.         }  
  98.   
  99.         // y轴数据集  
  100.         LineDataSet mLineDataSet = new LineDataSet(y, "测试数据集。by ZhangPhil");  
  101.   
  102.         // 用y轴的集合来设置参数  
  103.         // 线宽  
  104.         mLineDataSet.setLineWidth(3.0f);  
  105.   
  106.         // 显示的圆形大小  
  107.         mLineDataSet.setCircleSize(5.0f);  
  108.   
  109.         // 折线的颜色  
  110.         mLineDataSet.setColor(Color.DKGRAY);  
  111.   
  112.         // 圆球的颜色  
  113.         mLineDataSet.setCircleColor(Color.GREEN);  
  114.   
  115.         // 设置mLineDataSet.setDrawHighlightIndicators(false)后,  
  116.         // Highlight的十字交叉的纵横线将不会显示,  
  117.         // 同时,mLineDataSet.setHighLightColor(Color.CYAN)失效。  
  118.         mLineDataSet.setDrawHighlightIndicators(true);  
  119.   
  120.         // 按击后,十字交叉线的颜色  
  121.         mLineDataSet.setHighLightColor(Color.CYAN);  
  122.   
  123.         // 设置这项上显示的数据点的字体大小。  
  124.         mLineDataSet.setValueTextSize(10.0f);  
  125.   
  126.         // mLineDataSet.setDrawCircleHole(true);  
  127.   
  128.         // 改变折线样式,用曲线。  
  129.         // mLineDataSet.setDrawCubic(true);  
  130.         // 默认是直线  
  131.         // 曲线的平滑度,值越大越平滑。  
  132.         // mLineDataSet.setCubicIntensity(0.2f);  
  133.   
  134.         // 填充曲线下方的区域,红色,半透明。  
  135.         // mLineDataSet.setDrawFilled(true);  
  136.         // mLineDataSet.setFillAlpha(128);  
  137.         // mLineDataSet.setFillColor(Color.RED);  
  138.   
  139.         // 填充折线上数据点、圆球里面包裹的中心空白处的颜色。  
  140.         mLineDataSet.setCircleColorHole(Color.YELLOW);  
  141.   
  142.         // 设置折线上显示数据的格式。如果不设置,将默认显示float数据格式。  
  143.         mLineDataSet.setValueFormatter(new ValueFormatter() {  
  144.   
  145.             @Override  
  146.             public String getFormattedValue(float value) {  
  147.                 int n = (int) value;  
  148.                 String s = "y:" + n;  
  149.                 return s;  
  150.             }  
  151.         });  
  152.   
  153.         ArrayList<LineDataSet> mLineDataSets = new ArrayList<LineDataSet>();  
  154.         mLineDataSets.add(mLineDataSet);  
  155.   
  156.         LineData mLineData = new LineData(x, mLineDataSets);  
  157.   
  158.         return mLineData;  
  159.     }  
  160. }  

MainActivity.java需要的activity_main.xml :

[html] view plain copy
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent" >  
  5.   
  6.     <com.github.mikephil.charting.charts.LineChart  
  7.         android:id="@+id/chart"  
  8.         android:layout_width="match_parent"  
  9.         android:layout_height="match_parent" />  
  10.       
  11. </RelativeLayout>  


MPAndroidChart提供了丰富的参数设计条件,可以设计样式丰富统计图表,比如在本例中,如果把注释掉的这段代码重新启用:

[java] view plain copy
  1. // 改变折线样式,用曲线。  
  2.         // mLineDataSet.setDrawCubic(true);  
  3.         // 默认是直线  
  4.         // 曲线的平滑度,值越大越平滑。  
  5.         // mLineDataSet.setCubicIntensity(0.2f);  
  6.   
  7.         // 填充曲线下方的区域,红色,半透明。  
  8.         // mLineDataSet.setDrawFilled(true);  
  9.         // mLineDataSet.setFillAlpha(128);  
  10.         // mLineDataSet.setFillColor(Color.RED);  


那么折线图的样式就变成这样:


6
0
 
 

  相关文章推荐