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控件类的对象。
- 无数据时显示的文本内容
lineChart.setNoDataText();
- 设置背景颜色
lineChart.setBackgroundColor();
- 是否展示网格线
lineChart.setDrawGridBackground();
- 是否显示边界
lineChart.setDrawBorders();
- 是否可以拖动
lineChart.setDragEnabled();
- 是否有触摸事件
lineChart.setTouchEnabled();
- 设置X和Y轴的动画
lineChart.animateY();
lineChart.animateX();
- 设置数据填充(尽量放在最后,不然容易出现数据混乱)
lineChart.setData();
- 刷新数据
lineChart.invalidate();
- 更新List中数据后使用用于通知LineChart数据已更新
lineChart.notifyDataSetChanged();
- 设置右下角标签显示的内容
lineChart.setDescription();
- 设置边界的的宽度
lineChart.setBorderWidth();
- 设置边界的颜色
lineChart.setBorderColor();
- 设置是否支持手势监听如长按等...
ineChart.setPinchZoom();
- 设置是否允许x和y轴缩放
lineChart.setScaleEnabled(true);
- 设置x轴的最大可见范围,大于此值后不可进一步放大视图
lineChart.setVisibleXRangeMaximum();
- 设置x轴的最小可见范围,超过此值后会被视为不可见(若不滑动的chart的话)
lineChart.setVisibleXRangeMinimum();
LineDataSet类
通过
LineDataSet lineDataSet = new LineDataSet(List<Entry>, "显示的描述文本内容");
创建。一个LineDataSet代表一条线。此对象可以设置坐标系中折线图中点的大小,颜色,数值的大小等...
- 设置折线上的圆点颜色
lineDataSet.setCircleColor();
- 设置折线上的圆点的大小
lineDataSet.setCircleSize();
- 设置折线上的圆点是否是空心
lineDataSet.setDrawCircleHole();
- 设置折线的粗细
lineDataSet.setLineWidth();
- 设置折线上每个点上值的大小
lineDataSet.setValueTextSize();
- 设置折线的线段和数值的颜色
lineDataSet.setColor();
- 设置是否显示折线图填充
lineDataSet.setDrawFilled();
- 设置辅助线的颜色
lineDataSet.setHighLightColor();
- 设置节点是否显示具体值
lineDataSet.setDrawValues();
- 选择某个点的时候高亮显示的指示线
lineDataSet.enableDashedLine( , , );
- 填充可以设置渐变填充一个Drawable,或者仅仅填充颜色
lineDataSet.setFillColor();
- 如果使用的是右坐标轴必须设置这行
lineDataSet.setAxisDependency();
- 取消横向辅助线
lineDataSet.setDrawHighlightIndicators();
- 取消纵向辅助线
lineDataSet.setDrawVerticalHighlightIndicator()
LineData类
通过
LineData lineData = new LineData(存放x坐标值的List, 坐标系中要画的数据也就是LineDataSet对象);
创建。 这个库定义的数据集,类似于适配器,用于给图表存放数据,后使用LineChart对象的setData方法设置数据显示
- 设置每个数据点是否显示数值
lineData.setDrawValues();
Entry类
通过
Entry entry = new Entry(绘制在坐标系中的值对应Y轴, 绘制在坐标系中的位置对应第几个X轴上值,从零开始类似于数组的索引);
创建。 此对象常存放于泛型为Entry的List中,然后存入ListDataSet中,构造方法的第二个参数必须能在上面设置的X坐标值List中找到一个Entry对象对应坐标系中一个点List中有几个Entry对象,坐标系中就有几个点。
XAxis类
通过
XAxis xAxis = lineChart.getXAxis();
创建。此对象可用于控制LineChart控件中的X坐标轴。
- 是否隐藏此x坐标轴
xAxis.setEnabled();
- 设置X坐标轴显示的位置,默认在上方
xAxis.setPosition();
- 设置是否显示X轴的线条
xAxis.setDrawAxisLine();
- 设置是否显示X轴发散出去的网格线
xAxis.setDrawGridLines();
xAxis.setAvoidFirstLastClipping();
- 设置X轴坐标值区间间隔几个数,为0 时,无间隔
xAxis.setLabelsToSkip();
- 自定义x坐标值
xAxis.setValueFormatter(new XAxisValueFormatter() {
@Override
public String getXValue(String s, int i, ViewPortHandler viewPortHandler) {
return s+"分钟";
}
});
复制代码
- 设置是否显示轴上的刻度
xAxis.setDrawLabels();
- 背景用虚线表格来绘制
xAxis.enableGridDashedLine( , , );
- 设置坐标数值的颜色
xAxis.setTextColor();
YAxis类
LineChart控件中存在左右两个Y坐标轴,为此MPAndroidChart库提供了分别获得左右两边坐标轴的方法。获得左边Y轴:
YAxis yAxisL = lineChart.getAxisLeft();
获得右边Y轴:YAxis yAxisR = lineChart.getAxisRight();
此对象可用于控制LineChart控件中的Y坐标轴。
- 是否显示此坐标轴
yAxis.setEnabled();
- 设置是否显示Y轴的线条
yAxis.setDrawAxisLine();
- 设置Y坐标的值是否从0开始
yAxis.setStartAtZero();
- 设置坐标Y轴的坐标最小值
yAxis.setAxisMinValue();
- 设置左边Y轴的坐标值最大值
yAxisL.setAxisMaxValue();
- 设置坐标轴绘制在图表内侧
yAxisL.setPosition();
- 设置坐标轴上数值的颜色
yAxisL.setTextColor();
- 设置坐标轴距底部的距离(留白)
yAxisL.setSpaceBottom();
Legend类
通过
Legend legend = lineChart.getLegend();
创建。此类用于控制左下角的图例。
- 设置图例的样式(LegendForm)
legend.setForm();
- 设置图例的颜色
legend.setTextColor();
- 设置是否显示图例
legend.setEnabled();
- 设置图例的大小
legend.setTextSize();
- 设置图例最大百分比
legend.setMaxSizePercent();
- 设置图例出现的位置
legend.setPosition();
- 设置LegendForm 的大小
legend.setFormSize();
- 设置Legend 是否自动换行
legend.setWordWrapEnabled();
- 设置在水平轴上 legend-entries 的间隙
legend.setXEntrySpace();
- 设置在垂直轴上 legend-entries 的间隙
legend.setYEntrySpace();
- 设置legend-form 和 legend-label 之间的空间
legend.setFormToTextSpace();
- 设置自定义Legend 的标签和颜色
legend.setCustom();
- 通知数据更新
legend.notifyDataSetChanged();
- 设置自定义数据图例后在调用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();
复制代码