cartopy - AlbersEqualArea 使用经度和纬度限制区域
cartopy - AlbersEqualArea limit region using lon and lat
我有经度 -100o - 30o 和纬度 0o - 80o 的数据。
我想用投影只显示这个区域。
在我的脑海里,我想展示这样一个情节:
但是,当我按如下方式尝试 AlbersEqualArea 投影时:
plt.figure(figsize=(5.12985642927, 3))
ax = plt.axes(projection=ccrs.AlbersEqualArea(central_longitude=-35, central_latitude=40, standard_parallels=(0, 80)))
ax.set_extent([lon180[0], lon180[-1], lat[0], lat[-1]], ccrs.Geodetic())
我得到一张地图显示:
显示我拥有数据的区域的最佳方式是什么?
干杯,
雷
我认为您可能需要在图上添加 AlbersEqualArea 作为变换,也许更像是 this。
如果你想要一个非矩形的边界,你必须自己定义它。以下内容可能对您有用:
import cartopy.crs as ccrs
import matplotlib.pyplot as plt
import matplotlib.path as mpath
proj = ccrs.AlbersEqualArea(central_longitude=-35,
central_latitude=40,
standard_parallels=(0, 80))
ax = plt.axes(projection=proj)
ax.set_extent([-100, 30, 0, 80], crs=ccrs.PlateCarree())
ax.coastlines()
# Make a boundary path in PlateCarree projection, I choose to start in
# the bottom left and go round anticlockwise, creating a boundary point
# every 1 degree so that the result is smooth:
vertices = [(lon, 0) for lon in range(-100, 31, 1)] + \
[(lon, 80) for lon in range(30, -101, -1)]
boundary = mpath.Path(vertices)
ax.set_boundary(boundary, transform=ccrs.PlateCarree())
plt.show()
我有经度 -100o - 30o 和纬度 0o - 80o 的数据。
我想用投影只显示这个区域。
在我的脑海里,我想展示这样一个情节:
但是,当我按如下方式尝试 AlbersEqualArea 投影时:
plt.figure(figsize=(5.12985642927, 3))
ax = plt.axes(projection=ccrs.AlbersEqualArea(central_longitude=-35, central_latitude=40, standard_parallels=(0, 80)))
ax.set_extent([lon180[0], lon180[-1], lat[0], lat[-1]], ccrs.Geodetic())
我得到一张地图显示:
显示我拥有数据的区域的最佳方式是什么?
干杯, 雷
我认为您可能需要在图上添加 AlbersEqualArea 作为变换,也许更像是 this。
如果你想要一个非矩形的边界,你必须自己定义它。以下内容可能对您有用:
import cartopy.crs as ccrs
import matplotlib.pyplot as plt
import matplotlib.path as mpath
proj = ccrs.AlbersEqualArea(central_longitude=-35,
central_latitude=40,
standard_parallels=(0, 80))
ax = plt.axes(projection=proj)
ax.set_extent([-100, 30, 0, 80], crs=ccrs.PlateCarree())
ax.coastlines()
# Make a boundary path in PlateCarree projection, I choose to start in
# the bottom left and go round anticlockwise, creating a boundary point
# every 1 degree so that the result is smooth:
vertices = [(lon, 0) for lon in range(-100, 31, 1)] + \
[(lon, 80) for lon in range(30, -101, -1)]
boundary = mpath.Path(vertices)
ax.set_boundary(boundary, transform=ccrs.PlateCarree())
plt.show()