我在常规笛卡尔网格上定义了一些数据。我想只显示一些基于中心半径的条件。这将有效地形成一个环状结构,中心有一个洞。因此,我无法使用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
都试图填充环的中间,我希望可以留空。
更具体地说,左边的那个与我想要的类似,但我只能使用上面显示的这段代码得到右边的那个。
答案 0 :(得分:2)
以下显示如何根据条件屏蔽图的某些部分。使用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则以更全面的方式处理类似问题。
答案 1 :(得分:0)
尝试在内孔中创建虚假数据点,并将其设置为np.nan
或np.inf
。或者,您可以将它们设置为较高的值(在您的情况下,简称为1
),然后将限制传递给色标,以便不绘制这些高区域。