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()
结果:
问题如下:
- 我将
ax.set_extent
设置为 lon1
和 lon2
给出的经度范围。但是图中显示的是全球经度。
- 经度标记有误(应该是 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()
我试图绘制 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()
结果:
问题如下:
- 我将
ax.set_extent
设置为lon1
和lon2
给出的经度范围。但是图中显示的是全球经度。 - 经度标记有误(应该是 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()