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

如何在Matplotlib中根据第三组数值对两条曲线间的填充区域区分颜色

Matplotlib实现两条曲线间按数值映射多色填充的方法

原生fill_between默认仅支持单色填充,你可以根据你的第四组数据类型,选择以下两种实现方案:

方案1:分段填充(适用于离散类别型分组数据)

如果你的第四组数据是分类值(比如只有2-3种固定取值),可以多次调用fill_between配合where参数指定不同区间的填充规则,示例代码:

# 假设z为你的第四组分组数据,长度和x一致
# 按z的不同取值分段填充
self.axes.fill_between(x, y1, y2, where=(z == 1), color='red', alpha=0.7)
self.axes.fill_between(x, y1, y2, where=(z == 2), color='green', alpha=0.7)
self.axes.fill_between(x, y1, y2, where=(z == 3), color='blue', alpha=0.7)

你可以根据你的分组数量灵活调整where的条件和对应的颜色。

方案2:连续色映射填充(适用于连续数值型分组数据)

如果你的第四组数据是连续数值,需要实现渐变或连续映射的多色填充,可以结合pcolormesh和路径裁剪实现,示例代码:

import numpy as np

# 构造填充区域的网格数据
y_low = np.minimum(y1, y2)
y_high = np.maximum(y1, y2)
# 生成二维网格,y方向仅需2层即可覆盖填充区间
X, Y = np.meshgrid(x, [0, 1])
Y = y_low[np.newaxis, :] + (y_high - y_low)[np.newaxis, :] * Y
# 把第四组数值z扩展为和网格匹配的维度
Z = np.tile(z, (2, 1))

# 绘制伪彩填充
pcm = self.axes.pcolormesh(X, Y, Z, cmap='coolwarm', shading='auto')
# 裁剪掉两条曲线以外的多余区域
fill_patch = self.axes.fill_between(x, y1, y2, color='none')
pcm.set_clip_path(fill_patch.get_paths()[0], transform=self.axes.transData)

# 可选:添加颜色条展示数值和颜色的对应关系
self.figure.colorbar(pcm, ax=self.axes)

你可以通过修改cmap参数更换配色方案,也可以自定义Normalize规则调整数值到颜色的映射逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 23:06:00