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

如何基于Y值的最大最小值为Matplotlib折线图设置渐变色?

基于Matplotlib实现随Y值渐变的折线图

要实现折线颜色随Y值(最大值对应一种颜色,最小值对应另一种,中间渐变)变化的效果,Matplotlib默认的plot函数无法直接完成,因为折线是单一连续对象。我们可以将折线拆分为多个微小线段,为每个线段分配对应Y值的渐变颜色,具体实现如下:

完整代码

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.cm import ScalarMappable
from matplotlib.colors import Normalize

x = np.linspace(0, 4.*np.pi, 1000)
y = np.sin(x)

def hex_to_RGB(hex_str):
    """ #FFFFFF -> [255,255,255]"""
    #Pass 16 to the integer function for change of base
    return [int(hex_str[i:i+2], 16) for i in range(1,6,2)]

def get_color_gradient(c1, c2, n):
    """
    Given two hex colors, returns a color gradient
    with n colors.
    """
    assert n > 1
    c1_rgb = np.array(hex_to_RGB(c1))/255
    c2_rgb = np.array(hex_to_RGB(c2))/255
    mix_pcts = [x/(n-1) for x in range(n)]
    rgb_colors = [((1-mix)*c1_rgb + (mix*c2_rgb)) for mix in mix_pcts]
    return ["#" + "".join([format(int(round(val*255)), "02x") for val in item]) for item in rgb_colors]

color1 = "#EB1410"  # Y最小值对应颜色
color2 = "#080606"  # Y最大值对应颜色

# 归一化Y值,映射到0-1范围用于匹配颜色索引
y_norm = (y - y.min()) / (y.max() - y.min())
# 生成与数据点数量一致的渐变颜色列表
colors = get_color_gradient(color1, color2, len(y))

# 创建绘图对象
fig, ax = plt.subplots(figsize=(12,7))

# 拆分折线为多个小线段,逐个绘制并分配对应颜色
for i in range(len(x)-1):
    # 根据当前线段起点的Y值获取对应颜色
    color_idx = int(round(y_norm[i] * (len(colors)-1)))
    ax.plot(x[i:i+2], y[i:i+2], color=colors[color_idx], linewidth=2)

# 添加颜色条,展示Y值与颜色的对应关系
norm = Normalize(vmin=y.min(), vmax=y.max())
sm = ScalarMappable(norm=norm, cmap=plt.cm.colors.ListedColormap(colors))
sm.set_array([])
fig.colorbar(sm, ax=ax, label='Y值')

plt.show()

关键步骤说明

  1. 颜色渐变生成:复用你原有的get_color_gradient函数,生成从color1到color2的渐变颜色列表,数量与数据点一致。
  2. Y值归一化:将Y值转换为0-1范围的归一化值,用于精准匹配渐变颜色的索引。
  3. 拆分绘制线段:遍历每个相邻数据点对,绘制单个小线段,并根据对应Y值选择渐变颜色。这里使用线段起点的Y值对应颜色,你也可以改为两端Y值的平均值,效果差异极小。
  4. 添加颜色条:通过ScalarMappable创建颜色映射,添加颜色条让Y值与颜色的对应关系更直观。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 03:30:40