制作非均匀坐标的网格

问题描述 投票:0回答:1

我正在尝试绘制在非均匀坐标下评估的多元函数的轮廓。问题是由于将坐标存储为一维数组,特别是形状为 (n,) 的两列。当我分散 x 和 y 值时,我得到了所需的域

不幸的是,contourf 无法绘制一维数组。因此,我尝试使用 tricontourf,它可以处理一维数组。然而,由于某种原因,等高线图超出了域

我尝试创建一个网格并重塑 z(x, y) 值,以便我可以使用常规轮廓函数。然而,生成的网格并没有按预期出现

屏蔽附加区域可以解决问题,但我不知道该怎么做。

python matplotlib contour mesh
1个回答
0
投票

由于您的边缘看起来是直线,因此您应该能够定义遮罩来遮挡您不希望位于轮廓内部的区域。这个过程与这个答案中解释的几乎相同。

我必须生成域名,因为您没有提供这些详细信息,但生成后您可以执行以下操作:

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()

结果:

© www.soinside.com 2019 - 2024. All rights reserved.