我正在尝试绘制在非均匀坐标下评估的多元函数的轮廓。问题是由于将坐标存储为一维数组,特别是形状为 (n,) 的两列。当我分散 x 和 y 值时,我得到了所需的域
不幸的是,contourf 无法绘制一维数组。因此,我尝试使用 tricontourf,它可以处理一维数组。然而,由于某种原因,等高线图超出了域
我尝试创建一个网格并重塑 z(x, y) 值,以便我可以使用常规轮廓函数。然而,生成的网格并没有按预期出现
屏蔽附加区域可以解决问题,但我不知道该怎么做。
由于您的边缘看起来是直线,因此您应该能够定义遮罩来遮挡您不希望位于轮廓内部的区域。这个过程与这个答案中解释的几乎相同。
我必须生成域名,因为您没有提供这些详细信息,但生成后您可以执行以下操作:
import matplotlib.pyplot as plt
import matplotlib.tri as tri
# define x and y here
z = x**2 + y**2
triang = tri.Triangulation(x, y)
x2 = x[triang.triangles].mean(axis=1)
y2 = y[triang.triangles].mean(axis=1)
cond1 = (x2 > 0.6)&(y2 < 1)
cond2 = (y2 - 2.5*(x2 - 0.6) < 0)
triang.set_mask(cond1&cond2)
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12,5))
ax1.scatter(x, y)
ax2.tricontourf(triang, z)
ax2.set_xlim(ax1.get_xlim())
ax2.set_ylim(ax1.get_ylim())
fig.tight_layout()
fig.show()
结果: