有谁知道为什么会发生以下情况;我有一个包含1或0的数据数组。下面的代码,其中data = np.ma.masked_equal(data, 1)
屏蔽数据为1的任何点,仅在零上留下阴影线。这不能按预期工作(到处都是阴影)。有什么想法吗?
import numpy as np
from matplotlib import pyplot as plt
from mpl_toolkits.basemap import Basemap
data = np.zeros((324,432))
data[:,0:100] = 1
data = data.astype(np.int)
Lons_I,Lats_I = np.meshgrid(np.linspace(0,360,432),np.linspace(-90,90,324))
m = Basemap(projection='npstere',boundinglat=60,lon_0=0,resolution='c')
m.drawcoastlines(linewidth=0.3)
X, Y = m(Lons_I, Lats_I)
cs = m.contourf(X,Y,data,np.linspace(-5,5,26),cmap='RdBu_r',extend='both')
data = np.ma.masked_equal(data, 1)
plt.pcolor(X,Y,data, hatch=".",alpha=0)
cbar = m.colorbar(cs)
plt.show()
答案 0 :(得分:3)
问题不在于孵化。它也不是np.ma.masked_equal
函数。你可以通过将0
s交换到数组中的1
来尝试一下;这会将问题移植到0
而不是1
。
解决方案的路线忽略了阴影并使用非零α。使用更少的点,我们观察到有两种不同的颜色,
data = np.zeros((18,25))
data[:,0:9] = 1
Lons_I,Lats_I = np.meshgrid(np.linspace(0,360,25),np.linspace(-90,90,18))
m = Basemap(projection='npstere',boundinglat=60,lon_0=0,resolution='c')
m.drawcoastlines(linewidth=0.3)
X, Y = m(Lons_I, Lats_I)
data = np.ma.masked_equal(data, 1)
plt.pcolor(X,Y,data, alpha=0.3)
这告诉我们网格的一部分比另一个更频繁地绘制。
原因是使用的球面坐标系。该图在球体(0,360)上进行一次,但在正交方向(-90,90)也是一半。然后连接外部点,使得部分地图被双色化。
作为回报,这意味着可以通过不使用完整的半球来获得期望的结果。因此,我们不会从-90
转到90
,而是会稍微开始网格,例如从-89.99
到90
。
import numpy as np
from matplotlib import pyplot as plt
from mpl_toolkits.basemap import Basemap
data = np.zeros((324,432))
data[:,0:100] = 1
Lons_I,Lats_I = np.meshgrid(np.linspace(0,360,432),np.linspace(-89.99,90,324))
m = Basemap(projection='npstere',boundinglat=60,lon_0=0,resolution='c')
m.drawcoastlines(linewidth=0.3)
X, Y = m(Lons_I, Lats_I)
cs = m.contourf(X,Y,data,np.linspace(-5,5,26),cmap='RdBu_r',extend='both')
data = np.ma.masked_equal(data, 1)
plt.pcolor(X,Y,data, hatch=".", alpha=0)
cbar = m.colorbar(cs)
plt.show()