使用Basemap绘制具有常见颜色条的3个图形

时间:2013-07-17 15:29:56

标签: python projection colorbar matplotlib-basemap

我一直在使用此代码绘制带有常用颜色条的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?

谢谢

1 个答案:

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

Some ugly maps, but you get the idea.