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
相关产品推荐
相关产品推荐

