matplotlib Cartopy横向/纵向网格线未在图的左/右显示标签

h79rfbju  于 2022-11-15  发布在  其他
关注(0)|答案(1)|浏览(176)

我正在用下面的代码绘制北极立体Map。我想标注纬度和经度网格线,但Cartopy似乎只将这些标签放在绘图的顶部/底部,而我想让它们到处都是。我知道这样的事情一定是可能的,因为这个相关的SO问题:Setting longitude of latitude tick labels in 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()

结果图像:

w6lpcovy

w6lpcovy1#

我使用的是cartopy 0.19.0版,网格线的标签没有问题。对你的代码做了一些小的修改,我运行并得到了所有边的网格线标签。
对于标注与Map要素冲突而导致标注难以阅读的问题,制图人员有多种选择,通常使用地块的颜色和样式。
修改后的代码和图演示了上述所有内容。

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()

相关问题