You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyGMT如何重排图例顺序并设置指定航迹绘制在图层最上层

PyGMT 北极航迹绘制需求解决方案

1. 调整航迹图层优先级,将Cruise 3置于最上层

PyGMT的fig.plot方法支持和Matplotlib逻辑一致的zorder参数,参数值越大,对应图层的显示优先级越高。你可以给Cruise 3的plot调用设置一个高于其他航迹的zorder值,或是直接将Cruise 3的绘制顺序放在所有航迹最后,自然处于最上层。

2. 自定义图例排序,不跟随plot调用顺序

你可以通过「仅注册图例条目不绘制图形」的方式实现自定义排序,完全解耦绘制顺序和图例顺序:

  • 绘制所有航迹时不设置label参数,避免自动注册到图例
  • 所有航迹绘制完成后,按你期望的图例顺序,调用fig.plot时传入data=None,仅指定对应的label和pen参数,这一步只会往图例添加条目,不会绘制实际航迹

修改后的可运行示例代码如下:

import pygmt
# 此处默认cruise1_lon、cruise1_lat等航迹数据变量已提前定义
region,frame="g","g"
projection = 'G20.5/89.99999/25/4.5i' # 北极区域投影
fig = pygmt.Figure()
fig.coast(projection=projection, region=region, frame=frame, W=True) # 绘制海岸线
pen=0.9

# 按图层优先级绘制航迹,不设置label
fig.plot(cruise1_lon, cruise1_lat, pen=('black', pen))
fig.plot(cruise2_lon, cruise2_lat, pen=('green', pen))
fig.plot(cruise4_lon, cruise4_lat, pen=('purple', pen))
# 重点航次Cruise3最后绘制,额外加zorder=10保险保证在最上层
fig.plot(cruise3_lon, cruise3_lat, pen=('yellow', pen), zorder=10)

# 按期望顺序单独注册图例条目
fig.plot(data=None, label='"Cruise 1"', pen=('black', pen))
fig.plot(data=None, label='"Cruise 2"', pen=('green', pen))
fig.plot(data=None, label='"Cruise 3"', pen=('yellow', pen))
fig.plot(data=None, label='"Cruise 4"', pen=('purple', pen))

fig.legend(position='JTL+jTL+o0.2c',box='+gwhite+p1p') 
fig.show()

内容的提问来源于stack exchange,提问作者hänz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 13:45:03