Python - 使用pcolormesh和底图进行绘图

时间:2017-05-05 15:41:17

标签: python matplotlib plot matplotlib-basemap

我想用立体投影绘制我的数据。然而,当我试图绘制时,除了大​​陆之外没有任何东西被绘制。

为了解释,这是我的数据图的数字:

plt.pcolormesh(longrid_t, latgrid_t,totvart_t)

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

以下是仅使用pcolormesh(没有底图)绘制的图plt.pcolormesh(longrid_t, latgrid_t,totvart_t)

Figure plotted only with pcolormesh (without basemap : 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()

然而,这种立体投影的结果并非我的预期:

stereographic projection

我也尝试过其他预测。还有pcolor和contourf而不是pcolormesh。但它给了我相同的结果。

你有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您必须将坐标数据转换为投影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()

答案 1 :(得分:0)

非常感谢! 它可以简单地在ymy调用map.pcolormesh

中添加latlon = True kwarg