Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 中间有一个洞。_Python_Matplotlib - Fatal编程技术网

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
,则必须手动设置等高线标高。