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

如何为Matplotlib中的contourf绘图添加单个图例?

在Matplotlib的contourf中添加单个图例的解决方案

contourf本身不支持通过label参数直接添加图例——它的设计逻辑是为每个等高线层级生成独立的绘图元素,默认图例会为每个层级创建条目。要实现类似Matlab的单个图例条目样式,你可以通过自定义绘图元素来模拟。

方法1:使用自定义Patch元素

通过创建匹配contourf填充样式的Patch对象,将其作为单个图例条目添加:

import matplotlib.pyplot as plt
from matplotlib.patches import Patch
import numpy as np

# 生成测试数据
x = np.linspace(-2, 2, 100)
y = np.linspace(-2, 2, 100)
X, Y = np.meshgrid(x, y)
Z = np.exp(-X**2 - Y**2)

fig, ax = plt.subplots()
# 绘制contourf并获取绘图集合对象
cs = ax.contourf(X, Y, Z, levels=10)

# 从contourf的层级中选取一个颜色(示例选第6个层级的颜色)
patch_color = cs.collections[5].get_facecolor()[0]
# 创建自定义图例元素
legend_patch = Patch(facecolor=patch_color, label='My Contour Plot')
# 添加图例
ax.legend(handles=[legend_patch])

plt.show()

方法2:使用不可见的dummy绘图元素

通过绘制一个不可见的线条,利用其label参数生成单个图例条目,操作更简洁:

import matplotlib.pyplot as plt
import numpy as np

# 生成测试数据
x = np.linspace(-2, 2, 100)
y = np.linspace(-2, 2, 100)
X, Y = np.meshgrid(x, y)
Z = np.exp(-X**2 - Y**2)

fig, ax = plt.subplots()
ax.contourf(X, Y, Z, levels=10)

# 创建不可见的dummy线条,用大线宽模拟填充块效果
ax.plot([], [], color='slateblue', label='My Contour Plot', linewidth=12)
# 添加图例
ax.legend()

plt.show()

两种方法均可实现需求:方法1的颜色与contourf的层级颜色一致,更贴合原图风格;方法2自由度更高,可任意指定图例颜色。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 19:18:21