我在常规笛卡尔网格上定义了一些数据。我只想以基于中心半径的条件显示其中的一些。这将有效地创建一个中心有孔的环状结构。因此,我无法使用 imshowtricontourftripcolor 是我发现要处理的。我的代码看起来像这样:

R = np.sqrt(x**2+y**2)
flag = (R<150)*(R>10)
plt.tricontourf(x[flag], y[flag], data[flag], 100)

其中 xydata 定义的网格。这里的问题是 tricontourftripcolor 都试图填充环的中间,我希望可以留空。

更具体地说,左边的与我想要的相似,但我只能通过上面显示的这段代码获得右边的。

python - Tricontourf 图中间有一个洞。-LMLPHP

最佳答案

下面显示了如何根据条件屏蔽绘图的某些部分。使用 imshow 是完全可能的,这就是下面的脚本所做的。

这个想法是将图的所有不需要的部分设置为 nan 。为了使 nan 值消失,我们可以将它们的 alpha 设置为 0,基本上使这些点的绘图透明。

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-150, 150, 300)
y = np.linspace(-150, 150, 300)
X,Y = np.meshgrid(x,y)
data = np.exp(-(X/80.)**2-(Y/80.)**2)

R = np.sqrt(X**2+Y**2)
flag =np.logical_not( (R<110) * (R>10) )
data[flag] = np.nan

palette = plt.cm.jet
palette.set_bad(alpha = 0.0)

im = plt.imshow(data)

plt.colorbar(im)
plt.savefig(__file__+".png")
plt.show()

python - Tricontourf 图中间有一个洞。-LMLPHP


只是补充一点, tricontourf 也可以做你要问的事情。 This example from the matplotlib gallery 准确地显示了您正在寻找的内容,而 this question on SO 以更全面的方式处理类似的问题。

关于python - Tricontourf 图中间有一个洞。,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41713813/

10-12 17:50