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

如何为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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 19:12:44