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

Matplotlib如何根据列表数值为各线段设置区分度高的颜色

实现方案

plt.plot() 一次性生成的整条折线不支持单独给某一段设置颜色,只要把相邻两点拆成独立线段逐段绘制,再把对应数值映射到调色板取色就能实现需求,完整可运行代码如下:

import matplotlib.pyplot as plt
from matplotlib import cm
from matplotlib.colors import Normalize

l = [8, 5, 7, 10, 3, 3, 7, 5, 2, 6]
x = list(range(len(l)))

# 初始化颜色映射:数值范围对齐列表l的最值,选用区分度高的离散调色板
norm = Normalize(vmin=min(l), vmax=max(l))
cmap = cm.get_cmap('tab10')  # 可替换为Set2、Paired、viridis等其他调色板

# 逐段画线段:第i条线段对应l[i]的数值配色
for i in range(len(l) - 1):
    plt.plot(
        [x[i], x[i+1]], 
        [l[i], l[i+1]], 
        color=cmap(norm(l[i])),
        linewidth=2
    )

# 叠加绘制标记点,设置更高层级保证点显示在线段上方
plt.scatter(x, l, marker=".", s=400, c=[cmap(norm(v)) for v in l], zorder=10)

plt.show()

说明

  • 上述代码默认满足同值同色的规则:相同数值经过归一化和调色板映射后会得到完全一致的颜色,不同数值的颜色区分度足够
  • 如果对配色不满意,只需要修改cm.get_cmap()里的调色板名称即可,matplotlib内置了数十种可选调色板,可以根据自己的需求替换
  • 线段粗细、标记点大小都可以通过修改linewidth、s参数调整,和原有示例的视觉效果对齐

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 08:45:32