MPChart折线图工具类封装

本文详细介绍了一个用于Android平台的LineChart配置方法,包括如何初始化LineChart、添加数据点、设置X轴和Y轴属性以及添加限制线等内容。通过具体示例展示了如何调整坐标轴的样式、范围及刻度等细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.example.epnc.utils;

import android.graphics.Color;

import com.github.mikephil.charting.charts.LineChart;
import com.github.mikephil.charting.components.LimitLine;
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.PercentFormatter;
import com.github.mikephil.charting.interfaces.datasets.ILineDataSet;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by TCL on 2016/9/1.
 */
public class LineChartUtils {

    /**
     * 坐标线,LineDataSet(坐标点的集合, 线的描述或名称);
     */
     //private static Vector<ILineDataSet> dataSets = new Vector<ILineDataSet>();
     private static List<String> xValues;


    /**
     * @param lineChart
     * @param isYStartAtZero     是否从0开始
     * @param yAxisMinValue      最小值
     * @param yAxisMaxValue      最大值
     * @param isPercentFormatter 是否百分比显示
     */
    private static void setYAxis(LineChart lineChart, boolean isYStartAtZero,
                                 float yAxisMinValue, float yAxisMaxValue, boolean isPercentFormatter) {
        YAxis yAxis = lineChart.getAxisLeft();

        // Y轴刻度值颜色
        yAxis.setTextColor(Color.parseColor("#e0e0e0"));

        // 设置Y轴坐标是否从0开始
        yAxis.setStartAtZero(isYStartAtZero);
        // 设置Y轴坐标最大为多少
        yAxis.setAxisMaxValue(yAxisMaxValue);
        // 设置Y轴坐标最小为多少
        yAxis.setAxisMinValue(yAxisMinValue);

        // Y轴上的刻度竖线的颜色
        yAxis.setGridColor(Color.parseColor("#eeeeee"));

        // 设置Y轴上刻度竖线的宽度
        yAxis.setGridLineWidth(1.2f);

        //Y轴显示百分之几
        if (isPercentFormatter) {
            yAxis.setValueFormatter(new PercentFormatter());
        }

        // Y轴上的刻度的颜色
        yAxis.setTextColor(Color.parseColor("#9a9a9a"));

        yAxis.setDrawAxisLine(true);
    }

    /**
     * 设置X轴相关
     *
     * @param lineChart
     * @param xAxisStartPosition X轴起点
     * @param point              一个X轴点内部有几个数据点
     * @param labelToSkip        间隔位置
     */
    private static void setXAxis(LineChart lineChart, int xAxisStartPosition, int xAxisEndPosition, int point, int
            labelToSkip, String XTitleSuffix) {
        XAxis xAxis = lineChart.getXAxis();
        // X轴上的刻度的颜色
        xAxis.setTextColor(Color.parseColor("#a0a0a0"));

        // X轴颜色
        xAxis.setAxisLineColor(Color.BLUE);

        // X轴上的刻度竖线的颜色
        xAxis.setGridColor(Color.parseColor("#eeeeee"));

        // 设置X轴上刻度竖线的宽度
        xAxis.setGridLineWidth(1.2f);

        // X轴位置
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);

        // 设置坐标相隔多少,参数是int类型
        xAxis.setLabelsToSkip(labelToSkip);

        // 设置为true,则绘制该行旁边的轴线(axis-line)。
        xAxis.setDrawAxisLine(true);

        xValues = new ArrayList<>();
        xValues.clear();
        for (int i = xAxisStartPosition; i <= point * xAxisEndPosition; i++) {
            xValues.add((i / point) + XTitleSuffix);
        }
    }

    /**
     * @param lineChart
     * @param xAxisStartPosition X轴起点
     * @param xAxisEndPosition   X轴终点
     * @param point              一个X轴点内部有几个数据点
     * @param labelToSkip        间隔
     * @param isYStartAtZero     Y轴是否从0开始
     * @param yAxisMinValue      Y轴最小值
     * @param yAxisMaxValue      Y轴最大值
     * @param isPercentFormatter Y轴是否百分比显示
     * @param XTitleSuffix       x轴标题后缀文字
     */
    //2016/09/04 liuwei添加XTitleSuffix,实现x轴标题后缀文字
    public static void initLineChart(LineChart lineChart,
                                     int xAxisStartPosition, int xAxisEndPosition, int point, int labelToSkip,
                                     boolean isYStartAtZero, float yAxisMinValue, float yAxisMaxValue, boolean
                                             isPercentFormatter, String XTitleSuffix) {
        //dataSets.clear();
        // 设置描述
        lineChart.setDescription("");
        // 设置透明度
        lineChart.setAlpha(0.8f);
        // 挤压缩放
        lineChart.setPinchZoom(true);
        // 双击缩放
        lineChart.setDoubleTapToZoomEnabled(true);
        // 图例关闭
        lineChart.getLegend().setEnabled(false);
        // 设置是否可以触摸
        lineChart.setTouchEnabled(true);
        // 是否可以拖拽
        lineChart.setDragEnabled(true);
        // 是否可以缩放 x和y轴, 默认是true
        lineChart.setScaleEnabled(true);
        // Y轴右侧禁用
        lineChart.getAxisRight().setEnabled(false);
        // 设置X轴相关
        setXAxis(lineChart, xAxisStartPosition, xAxisEndPosition, point, labelToSkip, XTitleSuffix);
        // 设置Y轴相关
        setYAxis(lineChart, isYStartAtZero, yAxisMinValue, yAxisMaxValue, isPercentFormatter);
    }

    /**
     * @param lineChart
     * @param values      数据点
     * @param offset      X轴开始坐标偏移量
     * @param color       线的颜色
     * @param isDrawCubic 是否圆滑
     */
    public synchronized static void addLineToLineChart(LineChart lineChart,
                                                       float[] values, int[] offset, int color, boolean isDrawCubic) {

        // 坐标点的集合
        ArrayList<Entry> entries = new ArrayList<>();
        for (int i = 0; i < values.length; i++) {
            // 坐标点的值,Entry(Y坐标,X坐标)
            entries.add(new Entry(values[i], i + offset[i]));
        }
        // 坐标线,LineDataSet(坐标点的集合, 线的描述或名称);
        LineDataSet lineDataSet = new LineDataSet(entries, "");

        // 设置线的颜色
        lineDataSet.setColor(color);
        // 设置线的宽度
        lineDataSet.setLineWidth(1.2f);
        // 设置曲线为圆滑的线
        lineDataSet.setDrawCubic(isDrawCubic);
        // 取消数据点上的数值显示
        lineDataSet.setDrawValues(false);
        // 取消数据点上的原点
        lineDataSet.setDrawCircles(false);
        // lineChart.getLineData().getDataSets().add(lineDataSet);

        LineData data = null;
        if (lineChart.getData() == null) {
            List<ILineDataSet> dataSets = new ArrayList<>();
            dataSets.add(lineDataSet);
            data = new LineData(xValues, dataSets);
        } else {
            lineChart.getData().getDataSets().add(lineDataSet);
            data = new LineData(xValues, lineChart.getData().getDataSets());
        }
        //  add line
        // dataSets.add(lineDataSet);

        // 为图表添加数据
        lineChart.setData(data);
        // // 重新更新显示
        lineChart.invalidate();
    }


    /**
     * 添加限制线
     *
     * @param lineChart
     * @param value              限制线的值
     * @param description        描述
     * @param lineColor          颜色
     * @param isEnableDashedLine 是否虚线
     */
    public static void addLimitLineToLineChart(LineChart lineChart,
                                               float value, String description, int lineColor,
                                               boolean isEnableDashedLine) {
        LimitLine limitLine = new LimitLine(value, description);
        limitLine.setLineColor(lineColor);
        limitLine.setLineWidth(1f);
        limitLine.setTextColor(lineColor);
        limitLine.setTextSize(10f);
        if (isEnableDashedLine) {
            limitLine.enableDashedLine(10f, 10f, 0f);
        }
        // .. and more styling options
        lineChart.getAxisLeft().addLimitLine(limitLine);
    }
}

//调用:

 LineChartUtils.initLineChart(energy_power_factor_chart_view, 0, 24, 60, 120, false, minValue - minValue *
                0.2f, 40, false, "");
        LineChartUtils.addLineToLineChart(energy_power_factor_chart_view, valuesA, offsets,
                Color.parseColor("#c2c21d"), false);
        LineChartUtils.addLimitLineToLineChart(energy_power_factor_chart_view, 30f, "考核值", Color.parseColor
                ("#ff553b"), true);


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值