Tricontourf情节中间有一个洞。

时间:2017-01-18 07:44:19

标签: python matplotlib

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

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

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

更具体地说,左边的那个与我想要的类似,但我只能使用上面显示的这段代码得到右边的那个。

Sample plots

2 个答案:

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

enter image description here

<小时/> 只是要补充说tricontourf也可以做你要问的事情。 This example from the matplotlib gallery显示您正在寻找的内容,而this question on SO则以更全面的方式处理类似问题。

答案 1 :(得分:0)

尝试在内孔中创建虚假数据点,并将其设置为np.nannp.inf。或者,您可以将它们设置为较高的值(在您的情况下,简称为1),然后将限制传递给色标,以便不绘制这些高区域。