如何为Matplotlib中ax.contour绘制的等高线填充上下区域颜色?
Matplotlib等高线区域填充解决办法

你用ax.contour()绘制单条等高线后无法填充区域,核心原因是contour()仅负责绘制轮廓线条,本身不支持区域填充。下面给你两种实用的解决方法:
方法1:用contourf()直接填充(推荐)
contourf()是Matplotlib专门用于等高线区域填充的函数,能直接指定要填充的数值范围。比如要填充Z1≤2的区域,代码如下:
import numpy as np import matplotlib.pyplot as plt fig, ax = plt.subplots() # 填充Z1小于等于2的区域,levels指定数值区间 CS_fill = ax.contourf(X, Y, Z1, levels=[-np.inf, 2], colors='lightblue') # 叠加绘制等高线线条,保证轮廓清晰 CS1 = ax.contour(X, Y, Z1, [2], colors='black') ax.clabel(CS1, inline=True, fontsize=10) plt.show()
levels=[-np.inf, 2]表示填充从负无穷到2的所有区域,你也可以换成具体数值范围(比如[0,2])。colors参数直接指定填充颜色,支持RGB、十六进制色值或Matplotlib内置颜色名。
方法2:提取等高线路径手动填充
如果必须基于contour()返回的对象操作,可以提取等高线的路径顶点,用fill()逐个填充:
import matplotlib.pyplot as plt fig, ax = plt.subplots() CS1 = ax.contour(X, Y, Z1, [2]) # 遍历等高线集合中的路径,逐个填充 for collection in CS1.collections: for path in collection.get_paths(): # 获取路径的x、y顶点坐标,填充区域 ax.fill(path.vertices[:, 0], path.vertices[:, 1], color='lightblue', alpha=0.5) ax.clabel(CS1, inline=True, fontsize=10) plt.show()
alpha参数可以调整填充颜色的透明度,避免遮挡等高线或其他元素。- 这种方法适合需要对单个等高线路径做特殊处理的场景。
补充说明
如果要填充多条等高线之间的区域,只需调整contourf()的levels参数即可。比如levels=[2,5,8]会自动填充2-5、5-8两个区间的区域,还可以搭配cmap参数使用渐变色填充。
内容的提问来源于stack exchange,提问作者Davood Rafiei
相关产品推荐
相关产品推荐

