LineChart

LineChart为MPAndroidChart库中提供用于画折线图的控件。LineChart控件绘制的步骤为: 1. 通过创建一个用于存放X轴值的List集合容器Xlist,并为此List添加自己要绘制的所有X轴上的值。 2. 创建一个用于存放Entry对象的集合容器,Entry为此库提供的类,一个Entry对象对应一个坐标系中的值。3. 创建一个LineDataSet类对象用用于将所有Entry连起来在坐标系中绘制出一条折线。4. 创建一个LineData的对象用于存放LineDataSet。5. 通过findById()对象获得LineChart类的对象,并调用此类的setData()方法将前面创建的LineData数据传进去同于数据填充。

LineChart类

通过LineChart linechart = findViewById(...);创建。此对象是LineChart控件类的对象。

  1. 无数据时显示的文本内容
    lineChart.setNoDataText();
  2. 设置背景颜色
    lineChart.setBackgroundColor();
  3. 是否展示网格线
    lineChart.setDrawGridBackground();
  4. 是否显示边界
    lineChart.setDrawBorders();
  5. 是否可以拖动
    lineChart.setDragEnabled();
  6. 是否有触摸事件
    lineChart.setTouchEnabled();
  7. 设置X和Y轴的动画
    lineChart.animateY();lineChart.animateX();
  8. 设置数据填充(尽量放在最后,不然容易出现数据混乱
    lineChart.setData();
  9. 刷新数据
    lineChart.invalidate();
  10. 更新List中数据后使用用于通知LineChart数据已更新
    lineChart.notifyDataSetChanged();
  11. 设置右下角标签显示的内容
    lineChart.setDescription();
  12. 设置边界的的宽度
    lineChart.setBorderWidth();
  13. 设置边界的颜色
    lineChart.setBorderColor();
  14. 设置是否支持手势监听如长按等...
    ineChart.setPinchZoom();
  15. 设置是否允许x和y轴缩放
    lineChart.setScaleEnabled(true);
  16. 设置x轴的最大可见范围,大于此值后不可进一步放大视图
    lineChart.setVisibleXRangeMaximum();
  17. 设置x轴的最小可见范围,超过此值后会被视为不可见(若不滑动的chart的话) lineChart.setVisibleXRangeMinimum();
LineDataSet类

通过 LineDataSet lineDataSet = new LineDataSet(List<Entry>, "显示的描述文本内容");创建。一个LineDataSet代表一条线。此对象可以设置坐标系中折线图中点的大小,颜色,数值的大小等...

  1. 设置折线上的圆点颜色
    lineDataSet.setCircleColor();
  2. 设置折线上的圆点的大小
    lineDataSet.setCircleSize();
  3. 设置折线上的圆点是否是空心
    lineDataSet.setDrawCircleHole();
  4. 设置折线的粗细
    lineDataSet.setLineWidth();
  5. 设置折线上每个点上值的大小
    lineDataSet.setValueTextSize();
  6. 设置折线的线段和数值的颜色
    lineDataSet.setColor();
  7. 设置是否显示折线图填充
    lineDataSet.setDrawFilled();
  8. 设置辅助线的颜色
    lineDataSet.setHighLightColor();
  9. 设置节点是否显示具体值
    lineDataSet.setDrawValues();
  10. 选择某个点的时候高亮显示的指示线
    lineDataSet.enableDashedLine( , , );
  11. 填充可以设置渐变填充一个Drawable,或者仅仅填充颜色
    lineDataSet.setFillColor();
  12. 如果使用的是右坐标轴必须设置这行
    lineDataSet.setAxisDependency();
  13. 取消横向辅助线
    lineDataSet.setDrawHighlightIndicators();
  14. 取消纵向辅助线
    lineDataSet.setDrawVerticalHighlightIndicator()
LineData类

通过 LineData lineData = new LineData(存放x坐标值的List, 坐标系中要画的数据也就是LineDataSet对象);创建。 这个库定义的数据集,类似于适配器,用于给图表存放数据,后使用LineChart对象的setData方法设置数据显示

  1. 设置每个数据点是否显示数值
    lineData.setDrawValues();
Entry类

通过 Entry entry = new Entry(绘制在坐标系中的值对应Y轴, 绘制在坐标系中的位置对应第几个X轴上值,从零开始类似于数组的索引);创建。 此对象常存放于泛型为Entry的List中,然后存入ListDataSet中,构造方法的第二个参数必须能在上面设置的X坐标值List中找到一个Entry对象对应坐标系中一个点List中有几个Entry对象,坐标系中就有几个点。

XAxis类

通过 XAxis xAxis = lineChart.getXAxis(); 创建。此对象可用于控制LineChart控件中的X坐标轴。

  1. 是否隐藏此x坐标轴
    xAxis.setEnabled();
  2. 设置X坐标轴显示的位置,默认在上方
    xAxis.setPosition();
  3. 设置是否显示X轴的线条
    xAxis.setDrawAxisLine();
  4. 设置是否显示X轴发散出去的网格线
    xAxis.setDrawGridLines();xAxis.setAvoidFirstLastClipping();
  5. 设置X轴坐标值区间间隔几个数,为0 时,无间隔
    xAxis.setLabelsToSkip();
  6. 自定义x坐标值
xAxis.setValueFormatter(new XAxisValueFormatter() {
            @Override
            public String getXValue(String s, int i, ViewPortHandler viewPortHandler) {
                return s+"分钟";
            }
        });
复制代码
  1. 设置是否显示轴上的刻度
    xAxis.setDrawLabels();
  2. 背景用虚线表格来绘制
    xAxis.enableGridDashedLine( , , );
  3. 设置坐标数值的颜色
    xAxis.setTextColor();
YAxis类

LineChart控件中存在左右两个Y坐标轴,为此MPAndroidChart库提供了分别获得左右两边坐标轴的方法。获得左边Y轴:YAxis yAxisL = lineChart.getAxisLeft(); 获得右边Y轴:YAxis yAxisR = lineChart.getAxisRight(); 此对象可用于控制LineChart控件中的Y坐标轴。

  1. 是否显示此坐标轴
    yAxis.setEnabled();
  2. 设置是否显示Y轴的线条
    yAxis.setDrawAxisLine();
  3. 设置Y坐标的值是否从0开始
    yAxis.setStartAtZero();
  4. 设置坐标Y轴的坐标最小值
    yAxis.setAxisMinValue();
  5. 设置左边Y轴的坐标值最大值
    yAxisL.setAxisMaxValue();
  6. 设置坐标轴绘制在图表内侧
    yAxisL.setPosition();
  7. 设置坐标轴上数值的颜色
    yAxisL.setTextColor();
  8. 设置坐标轴距底部的距离(留白)
    yAxisL.setSpaceBottom();
Legend类

通过 Legend legend = lineChart.getLegend();创建。此类用于控制左下角的图例。

  1. 设置图例的样式(LegendForm)
    legend.setForm();
  2. 设置图例的颜色
    legend.setTextColor();
  3. 设置是否显示图例
    legend.setEnabled();
  4. 设置图例的大小
    legend.setTextSize();
  5. 设置图例最大百分比
    legend.setMaxSizePercent();
  6. 设置图例出现的位置
    legend.setPosition();
  7. 设置LegendForm 的大小
    legend.setFormSize();
  8. 设置Legend 是否自动换行
    legend.setWordWrapEnabled();
  9. 设置在水平轴上 legend-entries 的间隙
    legend.setXEntrySpace();
  10. 设置在垂直轴上 legend-entries 的间隙
    legend.setYEntrySpace();
  11. 设置legend-form 和 legend-label 之间的空间
    legend.setFormToTextSpace();
  12. 设置自定义Legend 的标签和颜色
    legend.setCustom();
  13. 通知数据更新
    legend.notifyDataSetChanged();
  14. 设置自定义数据图例后在调用notifyDataSetChanged()方法后调用此方法重新自动计算
    legend.resetCustom();
简单的绘制流程
/*通过findViewById()获取LineChart控件对象*/
LineChart lineChart = findViewById(R.id.lineChart);
/*Entry对象集合对应折线图上的点*/
List<Entry> entries = new ArrayList<>();
entries.add(new Entry(1f, 0));
entries.add(new Entry(2f, 1));
entries.add(new Entry(3f, 2));
entries.add(new Entry(4f, 3));
entries.add(new Entry(5f, 4));
/*X轴坐标值集合*/
List<String> list = new ArrayList<>();
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
/*对应坐标系中一条折线*/
LineDataSet lineDataSet = new LineDataSet(entries, "温度");
/*用于存放数据*/
LineData data = new LineData(list, lineDataSet);
/*设置数据填充*/
lineChart.setData(data);
/*刷新数据*/
lineChart.invalidate();
复制代码