Matplotlib中如何为set_xticks/set_yticks刻度添加W/N经纬度后缀
Matplotlib经纬度轴刻度标注解决方案
问题原因
之前调用plt.ylabel("Degrees North")未生效的核心原因有两点:
- 轴标题的作用是说明轴的度量含义,无法修改刻度数值本身的显示格式
- 代码中创建了独立于主Y轴的右侧副Y轴
secax,副轴的刻度、标签样式不会继承主Y轴的设置,仅配置主Y轴无法让右侧刻度同步生效
具体实现
直接对X轴、主Y轴、右侧副Y轴分别配置带单位后缀的刻度标签即可,修改后的可运行代码如下:
# 配置X轴:刻度值取绝对值后拼接W,标识西经 ax.set_xticks([-94, -96, -98, -100, -102, -104]) ax.set_xticklabels([f"{abs(tick_val)}W" for tick_val in ax.get_xticks()]) # 配置主Y轴:刻度值后拼接N,标识北纬 ax.set_yticks([28, 30, 32, 34, 36]) ax.set_yticklabels([f"{tick_val}N" for tick_val in ax.get_yticks()]) ax.set_ylabel("Degrees North") # 配置右侧副Y轴:同步刻度规则,拼接N标识北纬 secax = ax.secondary_yaxis(1.0) secax.set_yticks([28, 30, 32, 34, 36]) secax.set_yticklabels([f"{tick_val}N" for tick_val in secax.get_yticks()]) # 若需要给右侧副Y轴也添加维度标题,可放开下一行代码 # secax.set_ylabel("Degrees North")
动态适配优化方案
如果后续需要调整轴显示范围、希望刻度自动变化时也能正确显示单位,不需要手动维护刻度列表,可以用FuncFormatter实现自动格式化:
from matplotlib.ticker import FuncFormatter # X轴自动格式化为西经格式 ax.xaxis.set_major_formatter(FuncFormatter(lambda val, pos: f"{abs(val)}W")) # 主Y轴、副Y轴自动格式化为北纬格式 ax.yaxis.set_major_formatter(FuncFormatter(lambda val, pos: f"{val}N")) secax.yaxis.set_major_formatter(FuncFormatter(lambda val, pos: f"{val}N"))
提示:该写法适配任意刻度范围,不需要提前枚举所有刻度值,缩放轴时标签也会自动更新。
内容的提问来源于stack exchange,提问作者Fruitsy
相关产品推荐
相关产品推荐

