Python 中间有一个洞。
我有一些数据是在正规的笛卡尔网格上定义的。我只想展示其中的一些,它们的条件是基于中心半径的。这将有效地创建一个中心有孔的环形结构。因此,我无法使用Python 中间有一个洞。,python,matplotlib,Python,Matplotlib,我有一些数据是在正规的笛卡尔网格上定义的。我只想展示其中的一些,它们的条件是基于中心半径的。这将有效地创建一个中心有孔的环形结构。因此,我无法使用imshowtricontourf或tripcolor是我发现的处理方法。我的代码如下所示: R = np.sqrt(x**2+y**2) flag = (R<150)*(R>10) plt.tricontourf(x[flag], y[flag], data[flag], 100) R=np.sqrt(x**2+y**2) 标志=(R1
imshow
tricontourf
或tripcolor
是我发现的处理方法。我的代码如下所示:
R = np.sqrt(x**2+y**2)
flag = (R<150)*(R>10)
plt.tricontourf(x[flag], y[flag], data[flag], 100)
R=np.sqrt(x**2+y**2)
标志=(R10)
plt.tricontourf(x[flag],y[flag],数据[flag],100)
其中x
和y
是定义数据的网格。这里的问题是tricontourf
和tripcolor
都试图填充环的中间,我希望可以将其留空
更具体地说,左边的一个类似于我想要的,但是我只能通过上面显示的代码获得右边的一个
尝试在内孔中创建假数据点,并将其设置为np.nan
或np.inf
。或者,您可以将它们设置为一个高值(在您的情况下,简单地说是1
),然后将限制传递到色标,以便不打印这些高区域。下面显示了如何根据条件遮罩绘图的某些部分。使用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()
将numpy导入为np
将matplotlib.pyplot作为plt导入
x=np.linspace(-150150300)
y=np.linspace(-150150300)
十、 Y=np.meshgrid(X,Y)
数据=np.exp(-(X/80.)**2-(Y/80.)**2)
R=np.sqrt(X**2+Y**2)
flag=np.logical_not((R10))
数据[标志]=np.nan
调色板=plt.cm.jet
调色板。设置错误(alpha=0.0)
im=plt.imshow(数据)
打印颜色条(im)
plt.savefig(_文件__+“.png”)
plt.show()
再加上tricontourf
也可以满足您的要求。准确显示您正在寻找的内容,同时以更全面的方式处理类似问题。我尝试了np.nan
和np.inf
。它们都给出了中间有一种颜色,其余颜色对应于0
的图。作为替代方法,我尝试设置vmax
来限制色阶。在这种情况下,所有较大的值都被绘制为具有最大值。如果设置np.nan
,则必须手动设置等高线标高。