Cartopy:绘制区域地图时经度标签错误

Cartopy: wrong longitude labels when plotting regional maps

我试图绘制 119degE 和 90degW 之间的区域地图,但我的经度标签有问题。这是我的尝试:

import numpy as np
import cartopy.crs as ccrs
from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER
from matplotlib import pyplot as plt

lats = -31
latn =  31
lon1 = 119  
lon2 = 301   

plt.figure()                            
proj = ccrs.PlateCarree(central_longitude=210)    
ax = plt.axes(projection=proj)   
ax.set_extent([lon1, lon2, lats, latn], proj)  
ax.coastlines()                   
ax.set_xticks(np.arange(120,330,30) ,crs=ccrs.PlateCarree())
ax.set_yticks(np.arange(-30, 40,10) ,crs=ccrs.PlateCarree()) 
lon_formatter = LONGITUDE_FORMATTER
lat_formatter = LATITUDE_FORMATTER
ax.xaxis.set_major_formatter(lon_formatter)
ax.yaxis.set_major_formatter(lat_formatter)     

ax.set_ylabel(' ')   
ax.set_xlabel(' ')
plt.show()

结果:

问题如下:

  1. 我将 ax.set_extent 设置为 lon1lon2 给出的经度范围。但是图中显示的是全球经度。
  2. 经度标记有误(应该是 120E、150E、180、150W……)。

如何解决这些问题?

我使用的cartopy版本是v0.20.0.

使用 gridlines() 函数并进行适当的设置。请注意,函数中使用选项 crs=ccrs.PlateCarree() 来获取正确的地理经度。

import numpy as np
import cartopy.crs as ccrs
from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER
from matplotlib import pyplot as plt

lats = -31
latn =  31
lon1 = 119  
lon2 = 301   

plt.figure(figsize=[9,6])                            
proj = ccrs.PlateCarree(central_longitude=210)    
ax = plt.axes(projection=proj)   
ax.set_extent([lon1, lon2, lats, latn], proj)  
ax.coastlines()

gl = ax.gridlines(crs=ccrs.PlateCarree(), draw_labels=True, 
                  xlocs=np.arange(-150,360,30), ylocs=np.arange(-30, 40,10), 
                  x_inline=False, y_inline=False, linewidth=0.33, color='k',alpha=0.5)
gl.right_labels = False
gl.top_labels = False

ax.set_ylabel(' ')   
ax.set_xlabel(' ')
plt.show()