我一直在使用此代码绘制带有常用颜色条的3个数字:
grid_top = ImageGrid(fig, 211, nrows_ncols = (1, 3),
cbar_location = "right",
cbar_mode="single",
cbar_pad=.2)
for n in xrange(3):
im1 = grid_top[n].pcolor(data_top[n],
interpolation='nearest', vmin=0, vmax=5)
plt.show()
我想使用Basemap绘制正交投影,我定义为:
m=Basemap(projection='ortho',lon_0=lon_0,lat_0=lat_0,resolution='l',
llcrnrx=0.,llcrnry=0.,urcrnrx=m1.urcrnrx/2.,urcrnry=m1.urcrnry/2.)
何时,我更改上面的代码如下:
im1 = grid_top[n].m.pcolor(data_top[n], interpolation='nearest', vmin=0, vmax=5)
我收到错误..
我需要更改什么才能使其适用于Basemap?
谢谢
答案 0 :(得分:2)
嗯,如果没有看到你收到的错误信息就诊断特定错误有点困难,但我会试一试。
当你调用Basemap()
时,它会将地图绘制到当前活动的Axes
实例,但是当使用ImageGrid()
定义轴时,然后循环通过它们都不会激活。您可以使用plt.sca()
(设置当前轴)随时激活现有Axes实例。
要最终确定颜色条,您需要在使用colorbar()
或pcolor()
实际绘制某些数据后调用imshow()
实例。
以下是我认为你想要实现的一个有效例子:
data_top = []
for i in range(3):
data_top.append(np.random.random((5,5)))
fig = plt.figure(1,(8.,8.))
grid_top = ImageGrid(fig, 211, nrows_ncols = (1, 3),
cbar_location = "right",
cbar_mode="single",
cbar_pad=.2)
for g, d in zip(grid_top,data_top):
plt.sca(g)
M = Basemap(projection='ortho',lon_0=10.0,lat_0=50.0,resolution='l')
M.drawcoastlines()
M.drawparallels(np.arange(-90.,120.,30.))
M.drawmeridians(np.arange(0.,360.,60.))
I = M.imshow(d,vmin=0,vmax=1,interpolation="nearest")
grid_top.cbar_axes[0].colorbar(I)