2018.04.14
MPAndroidChart GitHub地址(英文):https://github.com/PhilJay/MPAndroidChart
官方文档(英文):https://github.com/PhilJay/MPAndroidChart/wiki
实现效果:
实现代码:MyLineChart
import android.content.Context; import android.graphics.Color; import com.github.mikephil.charting.charts.LineChart; import com.github.mikephil.charting.components.AxisBase; import com.github.mikephil.charting.components.XAxis; import com.github.mikephil.charting.components.YAxis; import com.github.mikephil.charting.data.Entry; import com.github.mikephil.charting.data.LineData; import com.github.mikephil.charting.data.LineDataSet; import com.github.mikephil.charting.formatter.IAxisValueFormatter; import com.github.mikephil.charting.interfaces.datasets.ILineDataSet; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.List; import static com.github.mikephil.charting.components.XAxis.XAxisPosition.BOTTOM; public class MyLineChart { private static String lineName1 = null; private static String lineName2 = null; private static String lineName3 = null; //三条直线的名字,若要绘制超过三条直线,可以继续添加,并重载构造函数 public static LineData initSingleLineChart(Context context,int count, float[] datas) {//绘制一条直线 ArrayList xValues = new ArrayList(); for (int i = 0; i < count; i++) { // x轴显示的数据,这里默认使用数字下标显示 xValues.add((i) + " "); } // y轴的数据 ArrayList yValues = new ArrayList(); for (int i = 0; i < count; i++) { // y轴的数据 yValues.add(new Entry(i,datas[i])); } LineDataSet dataSet = new LineDataSet(yValues, lineName1); dataSet.setColors(new int[] {R.color.Line1,R.color.Line2,R.color.Line3,R.color.Line4,R.color.Line5,R.color.Line6,R.color.Line7},context); //1-7分别是七个线段的颜色,以此来实现渐变效果 dataSet.setLineWidth(4.5f); //折现的宽度 dataSet.setCircleRadius(4); //转折点圆圈大小 dataSet.setAxisDependency(YAxis.AxisDependency.LEFT); List dataSets = new ArrayList(); dataSets.add(dataSet);//添加数据 LineData data = new LineData(dataSets); data.setDrawValues(false);//是否在转折点上写出该店的数值 return data; } public static LineData initDoubleLineChart(Context context,int count, float[] datas1, float[] datas2) {//两条 ArrayList xValues = new ArrayList(); for (int i = 0; i < count; i++) { // x轴显示的数据,这里默认使用数字下标显示 xValues.add((i) + " "); } // y轴的数据 ArrayList yValues1 = new ArrayList(); for (int i = 0; i < count; i++) { yValues1.add(new Entry(i,datas1[i])); } // y轴的数据 ArrayList yValues2 = new ArrayList(); for (int i = 0; i < count; i++) { yValues2.add(new Entry(i,datas2[i])); } LineDataSet dataSet1 = new LineDataSet(yValues1, lineName1); dataSet1.setColors(new int[]{R.color.Line1, R.color.Line2, R.color.Line3, R.color.Line4, R.color.Line5, R.color.Line6, R.color.Line7}, context); dataSet1.setLineWidth(4.5f); dataSet1.setCircleRadius(4); dataSet1.setAxisDependency(YAxis.AxisDependency.LEFT); LineDataSet dataSet2 = new LineDataSet(yValues2, lineName2); dataSet2.setColors(new int[]{R.color.Line8, R.color.Line9, R.color.Line10, R.color.Line11, R.color.Line12, R.color.Line13, R.color.Line14}, context); dataSet2.setLineWidth(4.5f); dataSet2.setCircleRadius(4); dataSet2.setAxisDependency(YAxis.AxisDependency.LEFT); List dataSets = new ArrayList(); dataSets.add(dataSet1); dataSets.add(dataSet2); LineData data = new LineData(dataSets); data.setDrawValues(false); return data; } public static LineData initTrebleLineChart(Context context,int count, float[] datas1, float[] datas2, float[] datas3) {//三条 ArrayList xValues = new ArrayList(); for (int i = 0; i < count; i++) { // x轴显示的数据,这里默认使用数字下标显示 xValues.add((i) + " "); } // y轴的数据 ArrayList yValues1 = new ArrayList(); for (int i = 0; i < count; i++) { yValues1.add(new Entry(i,datas1[i])); } ArrayList yValues2 = new ArrayList(); for (int i = 0; i < count; i++) { yValues2.add(new Entry(i,datas2[i])); } // y轴的数据 ArrayList yValues3 = new ArrayList(); for (int i = 0; i < count; i++) { yValues3.add(new Entry(i,datas3[i])); } LineDataSet dataSet1 = new LineDataSet(yValues1, lineName1); dataSet1.setColors(new int[]{R.color.Line1, R.color.Line2, R.color.Line3, R.color.Line4, R.color.Line5, R.color.Line6, R.color.Line7}, context); dataSet1.setLineWidth(4.5f); dataSet1.setCircleRadius(4); dataSet1.setAxisDependency(YAxis.AxisDependency.LEFT); LineDataSet dataSet2 = new LineDataSet(yValues2, lineName2); dataSet2.setColors(new int[]{R.color.Line8, R.color.Line9, R.color.Line10, R.color.Line11, R.color.Line12, R.color.Line13, R.color.Line14}, context); dataSet2.setLineWidth(4.5f); dataSet2.setCircleRadius(4); dataSet2.setAxisDependency(YAxis.AxisDependency.LEFT); LineDataSet dataSet3 = new LineDataSet(yValues3, lineName3); dataSet3.setColors(new int[]{R.color.Line15, R.color.Line16, R.color.Line17, R.color.Line18, R.color.Line19, R.color.Line20, R.color.Line21}, context); dataSet3.setLineWidth(4.5f); dataSet3.setCircleRadius(4); dataSet3.setAxisDependency(YAxis.AxisDependency.LEFT); List dataSets = new ArrayList(); dataSets.add(dataSet1); dataSets.add(dataSet2); dataSets.add(dataSet3); LineData data = new LineData(dataSets); data.setDrawValues(false); return data; } public static void initDataStyle(LineChart chart, LineData data, Context context, final String Unit,float yMin,float yMax) { //定制折线图的属性,具体含义参考官方文档 chart.getLegend().setEnabled(false); chart.getDescription().setEnabled(false); chart.getAxisRight().setEnabled(false); chart.setData(data); chart.invalidate(); IAxisValueFormatter xformatter = new IAxisValueFormatter() { String[] quarters = new String[] {" ", " ", " ", " " , " ", " ", " ", " "}; @Override public String getFormattedValue(float value, AxisBase axis) { return quarters[(int) value]; } }; IAxisValueFormatter yformatter = new IAxisValueFormatter() { DecimalFormat mFormat = new DecimalFormat(); @Override public String getFormattedValue(float value, AxisBase axis) { return mFormat.format(value)+" "+Unit+" ";//为y轴的数据添加单位,如示例图中的A和kwh } }; XAxis xAxis = chart.getXAxis(); xAxis.setGranularity(1f); // minimum axis-step (interval) is 1 xAxis.setPosition(BOTTOM); xAxis.setTextColor(Color.WHITE); xAxis.setDrawAxisLine(false); xAxis.setDrawGridLines(false); xAxis.setValueFormatter(xformatter); YAxis yAxis = chart.getAxisLeft(); yAxis.enableGridDashedLine(20, 10, 1); yAxis.setAxisMinimum(yMin); yAxis.setAxisMaximum(yMax); yAxis.setGranularity((yMax-yMin)/3); yAxis.setTextColor(Color.WHITE); yAxis.setValueFormatter(yformatter); } public static void setLineName1(String name) { lineName1 = name; } public static void setLineName2(String name) { lineName2 = name; } public static void setLineName3(String name) { lineName3 = name; } }
在主函数中调用:
绘制一条private void initPagerView1(View view,float yMin,float yMax){float[] datas1 = {536,123,769,432,102,26,94,85};List dataList1=new ArrayList<>();LineChart Chart=view.findViewById(R.id.chart);LineData lineData = MyLineChart.initSingleLineChart(this,datas1.length, datas1);MyLineChart.initDataStyle(Chart, lineData,this,"kwh",yMin,yMax);}绘制两条private void initPagerView2(View view,float yMin,float yMax){List dataList2=new ArrayList<>();float[] datas1 = {536,123,769,432,102,26,94,85};float[] datas2 = {10,87,355,432,900,800,700,85};LineChart Chart=view.findViewById(R.id.chart);LineData lineData = MyLineChart.initDoubleLineChart(this,datas1.length, datas1,datas2);MyLineChart.initDataStyle(Chart, lineData,this,"°C",yMin,yMax);}绘制三条private void initPagerView3(View view,String Unit,float yMin,float yMax){List dataList3=new ArrayList<>();float[] datas1 = {536,123,769,432,102,26,94,85};float[] datas2 = {10,87,355,432,900,800,700,85};float[] datas3 = {877,500,355,647,590,400,307,85};LineChart Chart=view.findViewById(R.id.chart);LineData lineData = MyLineChart.initTrebleLineChart(this,datas1.length, datas1,datas2,datas3);MyLineChart.initDataStyle(Chart, lineData,this,Unit,yMin,yMax);}