cartopy set_xlabel set_ylabel(不是ticklabels)

mat*_*use 5 python matplotlib axis-labels cartopy

使用cartopy地图时,我无法添加xlabel或ylabel.有没有办法做到这一点?我不是在寻找ticklabels.

import matplotlib.pyplot as plt
import cartopy
ax = plt.axes(projection=cartopy.crs.PlateCarree())
ax.add_feature(cartopy.feature.COASTLINE)
ax.set_xlabel('lon')
ax.set_ylabel('lat')
plt.show()
Run Code Online (Sandbox Code Playgroud)

Pap*_*gui 9

一次偶然的机会我发现跑步...

import matplotlib.pyplot as plt
import cartopy
ax = plt.axes(projection=cartopy.crs.PlateCarree())
ax.add_feature(cartopy.feature.COASTLINE)
ax.set_xlabel('lon')
ax.set_ylabel('lat')

ax.set_xticks([-180,-120,-60,0,60,120,180])
ax.set_yticks([-90,-60,-30,0,30,60,90])

plt.show()
Run Code Online (Sandbox Code Playgroud)

...它打印 xticks 和 yticks,还打印 xlabel 和 ylabel。在 xticks 和 yticks 已经定义的其他情况下,它们将被恢复...

ax.set_xticks(ax.get_xticks())
ax.set_yticks(ax.get_yticks())
Run Code Online (Sandbox Code Playgroud)

或者如果它们是在地图限制之外自动生成的

ax.set_xticks(ax.get_xticks()[abs(ax.get_xticks())<=180])
ax.set_yticks(ax.get_yticks()[abs(ax.get_yticks())<=90])
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

用于添加网格...

plt.grid()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 这也适用于空网格:`ax.set_yticks([])`。使用 Python 版本 3.7.6、Cartopy 0.17.0、Matplotlib 3.1.3 进行测试 (2认同)

小智 8

Cartopy的matplotlib网格线接管xlabel和ylabel并用它来管理网格线和标签. https://github.com/SciTools/cartopy/blob/master/lib/cartopy/mpl/gridliner.py#L93

import matplotlib.pyplot as plt
import cartopy
ax = plt.axes(projection=cartopy.crs.PlateCarree())
ax.add_feature(cartopy.feature.COASTLINE)
gridlines = ax.gridlines(draw_labels=True)
# this would not function, due to the gridliner
# ax.set_xlabel('lon')
# ax.set_ylabel('lat')
plt.show()
Run Code Online (Sandbox Code Playgroud)

如果要将标签添加到折纸轴的轴实例,则应将它们放置在不与网格线重叠的位置.目前您需要手动执行此操作,例如:

import matplotlib.pyplot as plt
import cartopy
ax = plt.axes(projection=cartopy.crs.PlateCarree())
ax.add_feature(cartopy.feature.COASTLINE)
gridlines = ax.gridlines(draw_labels=True)
ax.text(-0.07, 0.55, 'latitude', va='bottom', ha='center',
        rotation='vertical', rotation_mode='anchor',
        transform=ax.transAxes)
ax.text(0.5, -0.2, 'longitude', va='bottom', ha='center',
        rotation='horizontal', rotation_mode='anchor',
        transform=ax.transAxes)
plt.show()
Run Code Online (Sandbox Code Playgroud)

你需要调整ax.text放置的值以获得你想要的效果,这可能有点令人沮丧,但它是有用的.

添加到cartopy以自动化此放置将是一个很好的功能.

标记为gridliner