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

如何在Conditional contour plot中添加f(x,y)<9的禁入区域阴影?

解决条件等高线图中禁入区域着色的问题

嘿,我来帮你搞定这个需求!你之前用plt.contourf没成功,大概率是因为没针对性设置填充的区间范围,其实只需要简单调整参数就能实现你要的效果。

核心思路

我们需要精准定位f(x,y) < 9的区域,用填充工具给该区域上色后,再叠加原来的黑色等高线即可。这里有两种简洁的实现方式:


方法一:用contourf指定填充区间

这是最直接的方式,通过设置levels参数限定只填充Z值小于9的区域:

import numpy as np
import matplotlib.pyplot as plt

# 生成网格数据
x = np.linspace(0, 30, 1000)
y = np.linspace(0, 30, 1000)
X, Y = np.meshgrid(x, y)

# 定义目标函数
def f(x, y):
    return x**2 + y**2

Z = f(X, Y)

# 填充禁入区域:f(x,y) < 9
# levels设置为[-∞, 9],仅填充该区间内的区域
plt.contourf(X, Y, Z, levels=[-np.inf, 9], colors='lightcoral', alpha=0.5)

# 绘制原有黑色等高线
plt.contour(X, Y, Z, colors='black')

# 优化图表展示
plt.xlabel('X')
plt.ylabel('Y')
plt.title('Contour Plot with Restricted Area')
plt.axis('equal')  # 保持坐标轴比例,确保圆形区域显示正常
plt.show()

关键参数说明:

  • levels=[-np.inf, 9]:告诉contourf只填充所有Z值小于等于9的区域,精准匹配你的禁入条件
  • alpha=0.5:设置填充透明度,避免遮挡后面的等高线
  • axis('equal'):因为你的函数是圆的方程,这个参数能让禁入区域显示为标准圆形,不会被拉伸

方法二:用掩码数组标记禁入区域

如果需要更灵活的条件判断(比如多个禁入规则),可以先创建掩码数组再填充:

import numpy as np
import matplotlib.pyplot as plt

# 生成网格数据(同方法一)
x = np.linspace(0, 30, 1000)
y = np.linspace(0, 30, 1000)
X, Y = np.meshgrid(x, y)

def f(x, y):
    return x**2 + y**2

Z = f(X, Y)

# 创建掩码:标记f(x,y) < 9的区域为True
restricted_area = Z < 9

# 用pcolormesh填充掩码区域
plt.pcolormesh(X, Y, restricted_area, cmap='Reds', alpha=0.5, shading='auto')

# 叠加黑色等高线
plt.contour(X, Y, Z, colors='black')

# 图表优化(同方法一)
plt.xlabel('X')
plt.ylabel('Y')
plt.title('Contour Plot with Masked Restricted Area')
plt.axis('equal')
plt.show()

这种方式的优势是可以轻松扩展为复杂条件,比如(Z < 9) | (Z > 81)(同时标记小于9和大于81的区域)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:21:44