底图投影=“cyl”有什么问题?

问题描述 投票:1回答:2

最近几天,我使用Basemap可视化我的ncep再分析数据。发现使用Basemap(projection =“cyl”,lon_0 = 0.0,lat_0 = 0.0,resolution =“c”)enter image description here时只显示一半数据,但使用Basemap时会出现整个数据(projection =“cyl”,lon_0) = 180.0,lat_0 = 0.0,分辨率=“c”)enter image description here。此外,我更改了投影,但仍然将中心经度设置为0度,如底图(投影=“锤子”,lon_0 = 0.0,lat_0 = 0.0,分辨率=“c”),但整个dataenter image description here。整个数据发生了。怎么了 ?非常感谢您的回答。

python projection matplotlib-basemap
2个回答
1
投票

这是basemap的常见问题。即使数据在纵向上应该是循环的,basemap也无法正确处理。我通常使用cdo来首先按照它应该显示的方式对数据进行排序

cdo sellonlatbox,-180,180,-90,90 input.nc output.nc

cdo还提供了python wrapper,因此您可以直接在脚本中使用它。如果您不想使用cdo,可以使用numpy重新排列数据,这里有一个小例子:

from matplotlib import pyplot as plt
import numpy as np
from mpl_toolkits import basemap

fig,axes = plt.subplots(nrows=3, ncols=1)

mp1 = basemap.Basemap(ax = axes[0], projection = 'cyl', lon_0=180, lat_0=0)
mp2 = basemap.Basemap(ax = axes[1], projection = 'cyl', lon_0=0,   lat_0=0)
mp3 = basemap.Basemap(ax = axes[2], projection = 'cyl', lon_0=0,   lat_0=0)

for mp in mp1, mp2, mp3:
    mp.drawcoastlines()
    mp.drawcountries()
    mp.drawmeridians(np.arange(0,360,30))
    mp.drawparallels(np.arange(-90,90,30))


##some data:
lons = np.arange(0,360)
lats = np.arange(-90,91)
lons,lats = np.meshgrid(lons,lats)
data = np.sin(2*np.pi*lons/360)+np.sin(np.pi*lats/180)

##first plot
mp1.pcolormesh(lons,lats,data)

##second plot
mp2.pcolormesh(lons,lats,data)

##third plot (with longitudes re-ordered)
lons = lons%180-180*(lons//180) ##re-computing lons to be from -180 to 180

lon_order = np.argsort(lons, axis = 1) ##computing new order of lons
lat_order = np.argsort(lats, axis = 0) ## ... and lats (maybe unnecessary)

mp3.pcolormesh(lons[lat_order,lon_order],lats, data[lat_order,lon_order])

plt.show()

结果如下所示,第一个图显示原始格式的数据,第二个图试图将数据置于lon_0=0中心而不重新排序,第三个图重新排序。

result of the above code

希望这可以帮助。


0
投票

在几种情况下,数据集中的经度范围是0-360,而底图期望它从-180到180.可以使用basemap shiftgrid函数来处理这个问题。

from mpl_toolkits.basemap import Basemap

data, lon = shiftgrid(180., data, lon, start=False) # shiftgrid

© www.soinside.com 2019 - 2024. All rights reserved.