如何在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
相关产品推荐
相关产品推荐

