0

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

谢谢

4

1 回答 1

2

好吧,在没有看到您收到的错误消息的情况下诊断特定错误有点困难,但我会试一试。

当您调用Basemap()它时,它会将地图绘制到当前活动的Axes实例,但是当使用定义轴ImageGrid()然后循环通过它们时,它们中的任何一个都不会处于活动状态。您可以随时使用plt.sca()(设置当前轴)激活现有轴实例。

要最终确定颜色条,您需要在使用orcolorbar()实际绘制一些数据后调用一个实例。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)

一些丑陋的地图,但你明白了。

于 2013-07-18T21:36:44.940 回答