Cartopy经纬网格线未在绘图的左/右侧显示标签

4
我正在使用以下代码绘制NorthPolarStereo地图。我想标注纬度和经度网格线,但是Cartopy似乎只将这些标签放置在图形的顶部/底部,而我希望它们能够在整个图形周围展开。我知道这样的事情一定是可能的,因为这个相关的SO问题提到了:设置NorthPolarStereo Cartopy中的纬度刻度线的经度,但我似乎无法重现它。
此外,是否有任何方法可以自定义内联的y(纬度)标签的位置?它们部分被网格线和海岸线特征遮挡。
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.feature as cfeature
import numpy as np
import matplotlib.ticker as mticker
from matplotlib.offsetbox import AnchoredText

fig = plt.figure(figsize=(5,5))

projection = ccrs.NorthPolarStereo(central_longitude=-100)

ax = plt.subplot(projection=projection)

ax.set_extent([0, 360, 65, 90], crs=ccrs.PlateCarree())

ax.add_feature(cfeature.COASTLINE)
ax.add_feature(cfeature.OCEAN)
ax.add_feature(cfeature.LAND)

xticks = np.arange(-180, 181, 30)
yticks = np.arange(70, 91, 10)

gl = ax.gridlines(crs=ccrs.PlateCarree(), color='k', draw_labels=True, dms=True, x_inline=False, y_inline=True)

gl.ylocator = mticker.FixedLocator(yticks)
gl.xlocator = mticker.FixedLocator(xticks)
gl.xlabel_style = {'rotation':0}

text = AnchoredText('© Natural Earth; license: public domain',
                    loc=4, prop={'size': 10}, frameon=True)

ax.add_artist(text)

plt.show()

生成的图像如下所示:

北极立体投影地图

1个回答

2
我使用的是cartopy 0.19.0版本,关于网格线标签没有问题。通过对您的代码进行微小修改,我成功地在所有边上获取了网格线标签。
对于标签与地图要素之间的冲突,导致标签难以阅读,制图师有几种选择来解决这个问题。他们通常使用绘图的颜色和样式。
修改后的代码和绘图展示了以上所有内容。
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.feature as cfeature
import numpy as np
import matplotlib.ticker as mticker
from matplotlib.offsetbox import AnchoredText

fig = plt.figure(figsize=(5,5))

projection = ccrs.NorthPolarStereo(central_longitude=-100)

ax = plt.subplot(projection=projection)
ax.set_extent([-180, 179.9, 65, 90], ccrs.PlateCarree())
#ax.set_extent([0, 360, 65, 90], crs=ccrs.PlateCarree())

ax.add_feature(cfeature.COASTLINE, color="gray", lw=0.75)
ax.add_feature(cfeature.OCEAN)
ax.add_feature(cfeature.LAND)

xticks = np.arange(-180, 181, 30)
yticks = np.arange(70, 91, 10)

gl = ax.gridlines(crs=ccrs.PlateCarree(), 
                  color='gray', 
                  draw_labels=True, 
                  dms=True, 
                  x_inline=False, 
                  y_inline=True)

gl.ylocator = mticker.FixedLocator(yticks)
gl.xlocator = mticker.FixedLocator(xticks)
gl.xlabel_style = {'rotation':0}

text = AnchoredText('© Natural Earth; license: public domain',
                    loc=4, prop={'size': 10}, frameon=True)

ax.add_artist(text)

plt.show()

地图

编辑 从下面的评论中发现,cartopy v0.21.0不能生成预期的绘图结果。

我不知道原因,但可以通过用以下代码替换plt.show()来解决并获得结果。

import cartopy
if cartopy.__version__ == '0.21.0':
    plt.draw()
    for ea in gl.left_label_artists+gl.right_label_artists:
        ea.set_visible(True)
plt.show()

1
有趣的是,我在cartopy 0.21.0中使用了您修改后的代码,但仍然无法在绘图的侧面获得标签。看起来在0.19.0和0.21.0之间cartopy发生了一些变化。 - lsterzinger
@lsterzinger,请查看更新。非常感谢您的评论。 - swatchai
这种情况在0.20.2版本中也可以看到,解决方案同样有效。谢谢。 - Yongwu Xiu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接