matplotlib 具有不同“中心经度”的变换“林姆”在“Cartopy”上

j2qf4p5b  于 2023-03-19  发布在  其他
关注(0)|答案(1)|浏览(116)

我想创建一个Map墨卡托投影从-60S到60 N,但与-160W作为中心经度。

import matplotlib.pyplot as plt
import cartopy.crs as ccrs

fig = plt.figure()
ax = fig.add_subplot(1,1,1,
        projection=ccrs.PlateCarree(central_longitude=0)
)
ax.set_extent([-180,180,-60,60])
ax.coastlines(resolution='110m')
ax.gridlines(draw_labels=True)

返回central_longitude=0的预期结果

但是如果central_longitude=-60
它回来了

我的问题是:
1.为什么cartopy会有这样的行为?
1.我该如何解决这个问题?

bpzcxfmw

bpzcxfmw1#

您需要在相关选项参数中指定正确的值。默认值并不总是有效的。

import matplotlib.pyplot as plt
import cartopy.crs as ccrs

noproj = projection=ccrs.PlateCarree()  #central_longitude=0
myproj = projection=ccrs.PlateCarree(central_longitude=-60)

fig = plt.figure()
ax = fig.add_subplot(1,1,1,
        projection = myproj
)

# *** Dont use 180 but 179.95 to avoid mysterious error
# longitudes -180 and +180 are sometimes interpreted as the same location
# Also specify `crs` correctly
ax.set_extent([-179.95, 179.95, -60, 60], crs=noproj)
# In the more recent versions of Cartopy, you can use [-180,180,-60,60] 
ax.coastlines(resolution='110m')
ax.gridlines(draw_labels=True)

plt.show()

编辑

请注意,缺少60度N和S的标注。要将它们打印在Map上,需要此选项

ax.set_extent([-179.95, 179.95, -60.01, 60.01], crs=noproj)

作为相关代码行的替换。

相关问题