卡通地图填充整个轴

2024-04-20 09:41:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用Cartopy在网格(在LCC投影中)上绘制数据,以便数据填充整个轴(以及轴,但这不是这里的问题)。在

为了更清楚地说明这一点,我对卡通比做了些什么:

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

结果是一个不填充整个轴的图像,但看起来像这样: Cartopy

像这样使用Basemap时:

^{pr2}$

我得到了以下(想要的)图像: Basemap

最后,当使用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')我再次得到所需的图像:

proj4

有没有可能在卡通片中实现这一点?在

换句话说,我希望有一个图,数据显示在一个完美的矩形中,而背景地图也相应地被扭曲,也就是说,与这个example相反的东西(不能安装iris包,否则我会用这个例子来尝试)

我试过一些方法,比如:

  • 为我的投影构建一个自定义类here,只是为了确保所有参数都设置正确(就像在proj4定义中一样)。在
  • aspect ratios玩,但它们只影响轴而不是轴, 还有一些事情。在

非常感谢任何帮助!在


Tags: 数据图像importasnpplt投影lon
1条回答
网友
1楼 · 发布于 2024-04-20 09:41:58

这里缺少的一个重要信息是,数据是在lats和lons中,不是在笛卡尔横向墨卡托坐标系中。因此,您将需要使用一个笛卡尔坐标系,该坐标系表示lats和lons(目前还没有实现球面轮廓)。这样的坐标系是以PlateCarree crs的形式存在的,所以简单地将其作为轮廓数据的变换就可以将数据放在正确的位置。在

plt.contourf(lon, lat, Z, transform=ccrs.PlateCarree())

这确实突出了这样一个事实,即数据的默认坐标系与地图的坐标系相同,在大多数情况下,它不是经纬度—更改数据的CRS的唯一方法是传递transform关键字。在

高温

相关问题 更多 >