我在常规笛卡尔网格上定义了一些数据。我只想以基于中心半径的条件显示其中的一些。这将有效地创建一个中心有孔的环状结构。因此,我无法使用 imshow
。 tricontourf
或 tripcolor
是我发现要处理的。我的代码看起来像这样:
R = np.sqrt(x**2+y**2)
flag = (R<150)*(R>10)
plt.tricontourf(x[flag], y[flag], data[flag], 100)
其中
x
和 y
是 data
定义的网格。这里的问题是 tricontourf
和 tripcolor
都试图填充环的中间,我希望可以留空。更具体地说,左边的与我想要的相似,但我只能通过上面显示的这段代码获得右边的。
最佳答案
下面显示了如何根据条件屏蔽绘图的某些部分。使用 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()
只是补充一点,
tricontourf
也可以做你要问的事情。 This example from the matplotlib gallery 准确地显示了您正在寻找的内容,而 this question on SO 以更全面的方式处理类似的问题。关于python - Tricontourf 图中间有一个洞。,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41713813/