You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android使用MPChart库实现折线图时如何标注最大值和最小值

MPAndroidChart 折线图标注最大最小值实现方案

效果参考图

实现逻辑如下:

  • 先遍历折线数据源,筛选出最大值、最小值
  • 自定义数值格式化器,仅在匹配到最大最小值的点位返回数值文本,其余点位返回空
  • 配置圆点绘制规则,仅在最大最小值点位显示可见圆点,其余点位透明
  • 保留原有折线填充、高亮等配置即可

修改后的完整代码:

// 遍历数据源获取最大、最小值
var maxValue = -Float.MAX_VALUE
var minValue = Float.MAX_VALUE
values.forEach { entry ->
    if (entry.y > maxValue) maxValue = entry.y
    if (entry.y < minValue) minValue = entry.y
}

val lineDataSet = LineDataSet(values, "")
lineDataSet.lineWidth = 2f
lineDataSet.setDrawValues(true)
lineDataSet.setDrawFilled(true)
lineDataSet.color = resources.getColor(R.color.green)
lineDataSet.highLightColor = resources.getColor(R.color.coral)

// 开启圆点绘制
lineDataSet.setDrawCircles(true)
lineDataSet.circleHoleRadius = 5f
lineDataSet.circleRadius = 6f

// 配置数值格式化规则,仅最大最小值显示文本
lineDataSet.valueFormatter = object : ValueFormatter() {
    override fun getPointLabel(entry: Entry?): String {
        entry ?: return ""
        return if (entry.y == maxValue || entry.y == minValue) {
            // 按需调整数值格式化规则,比如保留1位小数
            String.format("%.1f", entry.y)
        } else {
            ""
        }
    }
}
// 配置数值文本样式
lineDataSet.valueTextSize = 12f
lineDataSet.valueTextColor = resources.getColor(R.color.green)

// 配置圆点显示规则,仅最大最小值点位可见
lineDataSet.circleColors = object : ArrayList<Int>() {
    override fun get(index: Int): Int {
        val entry = values[index]
        return if (entry.y == maxValue || entry.y == minValue) {
            resources.getColor(R.color.green)
            // 如需区分最大最小值颜色可拆分判断:
            // if(entry.y == maxValue) Color.RED else Color.BLUE
        } else {
            Color.TRANSPARENT
        }
    }
}

val elevationMarker = ChartMarkerView2(activity)
binding!!.chart.markerView = elevationMarker
lineDataSet.setDrawHighlightIndicators(true)
lineDataSet.setDrawHorizontalHighlightIndicator(false)
lineDataSet.setDrawCircleHole(true)

val drawable = ContextCompat.getDrawable(requireContext(), R.drawable.fade_graph_bg)
lineDataSet.fillDrawable = drawable
lineDataSet.axisDependency = YAxis.AxisDependency.LEFT

val dataSets = ArrayList<ILineDataSet>()
dataSets.add(lineDataSet)
val data = LineData(dataSets)
binding!!.chart.data = data
binding!!.chart.invalidate()

内容的提问来源于stack exchange,提问作者Abdul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 15:24:02