我想用立体投影来绘制数据。但是,当我尝试绘图时,除了各大洲以外,什么也没画。

解释一下,这是我的数据图:

plt.pcolormesh(longrid_t, latgrid_t,totvart_t)


其中longrid_t是经度,latgrid_t是纬度,totvart_t是我要绘制的数据。

这是仅以pcolormesh(无底图)为plt.pcolormesh(longrid_t, latgrid_t,totvart_t)绘制的图:



现在,我尝试使用立体投影来绘制这些数据:

map = Basemap(width=10000000,height=6000000, resolution='l',projection='stere',
        lat_0=40.,lon_0=-40.)
map.fillcontinents(color='darkgrey',lake_color='darkgrey')
map.drawcoastlines()
map.drawparallels(arange(-90, 91., 10.), labels=[1, 0, 0, 1],
                dashes=[1, 1], linewidth=0.25, color='0.5')
map.drawmeridians(arange(-180., 181., 10.), labels=[1, 0, 0, 1],
                dashes=[1, 1], linewidth=0.25, color='0.5')

map.pcolormesh(longrid_t, latgrid_t, totvart_t, cmap='jet')
map.colorbar()


但是,这种立体投影的结果不是我期望的:



我也尝试过其他预测。并且也可以使用pcolor和contourf代替pcolormesh。但这给了我相同的结果。

你有想法吗?

最佳答案

您必须将坐标数据转换为投影xy坐标,然后使用转换后的坐标进行绘制:

map = Basemap(width=10000000,height=6000000, resolution='l',projection='stere',
        lat_0=40.,lon_0=-40.)
map.fillcontinents(color='darkgrey',lake_color='darkgrey')
map.drawcoastlines()
map.drawparallels(arange(-90, 91., 10.), labels=[1, 0, 0, 1],
                dashes=[1, 1], linewidth=0.25, color='0.5')
map.drawmeridians(arange(-180., 181., 10.), labels=[1, 0, 0, 1],
                dashes=[1, 1], linewidth=0.25, color='0.5')
# convert lat-lon to projection coordinate system
xpt,ypt = m(longrid_t, latgrid_t) # convert to projection map

map.pcolormesh(xpt, ypt, totvart_t, cmap='jet')
map.colorbar()

10-04 16:06