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

