我想用Cartopy在网格上绘制数据(在LCC投影中),以便数据填充整个轴(以及轴,但这不是问题)。
为了更清楚,这是我用Cartopy做的事情:
import cartopy.crs as ccrs
import numpy as np
import pyproj as p4
from mpl_toolkits.basemap import Basemap
lalo = #read latitudes and longitudes of my grid defined in a special LCC projection (below)
lat = np.reshape(lalo[:,1],(ny,nx))
lon = np.reshape(lalo[:,0],(ny,nx))
minlat = lat[0,0]
maxlat = lat[-1,-1]
minlon = lon[0,0]
maxlon = lon[-1,-1]
Z = np.ones((ny,nx)) #some data
#grid definition for cartopy:
myproj = ccrs.LambertConformal(central_longitude=13.3333, central_latitude=47.5,
false_easting=400000, false_northing=400000,
secant_latitudes=(46, 49))
fig = plt.figure()
ax = plt.axes(projection = myproj)
plt.contourf(lon, lat, Z)#, transform=myproj)
#no difference with transform option as lon,lat are already in myproj projection
结果是图像没有填满整个轴,但看起来像这样:
使用这样的Basemap时:
a=6377397.155
rf=299.1528128
b= a*(1 - 1/rf)
m = Basemap(projection='lcc', resolution='h', rsphere=(a,b),
llcrnrlon=minlon,llcrnrlat=minlat,urcrnrlon=maxlon,urcrnrlat=maxlat,
llcrnrx=400000, llcrnry=400000,
lat_1=46, lat_2=49, lat_0=47.5, lon_0=13.3333, ax=ax)
x,y = m(lon,lat)
m.contourf(x,y,Z)
我得到以下(所需)图像:
最后,当使用proj4转换lon和lat时,使用此定义p4.Proj('+proj=lcc +lat_1=46N +lat_2=49N +lat_0=47.5N +lon_0=13.3333 +ellps=bessel +x_0=400000 +y_0=400000')
我再次获得所需的图像:
是否有可能在纸板上实现这一目标?
换句话说,我想有一个情节,数据显示在一个完美的矩形中,背景图相应地扭曲,即与example相反的东西(不能安装虹膜包,否则我会尝试这个例子)
我尝试过以下几件事:
非常感谢任何帮助!
答案 0 :(得分:2)
此处缺少的重要信息是您的数据在笛卡尔横向墨卡托坐标系中的拉力和离子,不是。因此,您需要使用笛卡尔坐标系统,该坐标系统说明了拉特和隆起(此时尚未实现球面轮廓)。这样的坐标系以PlateCarree crs的形式存在 - 所以简单地将其传递为轮廓数据的转换应该将您的数据放在正确的位置。
plt.contourf(lon, lat, Z, transform=ccrs.PlateCarree())
这真实地突出了这样一个事实:数据的默认坐标系与地图的默认坐标系相同,在大多数情况下不是经度和纬度 - 改变CRS的唯一方法您的数据是通过传递transform关键字。
HTH