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

Matplotlib双轴(twinx)下如何让原始轴图例置于顶层?

Matplotlib双轴图表中让原始轴图例显示在顶层(保留网格)

问题描述

使用Matplotlib的twinx()创建双轴图表时,原始轴的图例被双轴绘制的线条遮挡,需要让原始轴的图例显示在顶层,同时保留原始轴的网格。

初始代码

fig2,ax2 = plt.subplots()
ax2.cla()
axx2.cla()
axx2 = ax2.twinx()
ax2.plot(range(1,11), range(2,12), label="main", zorder=100)
axx2.plot(range(1,11), [100 for i in range(1,11)], label="second", zorder=10, color="black", linewidth=2)
ax2.legend(loc="center left").set_zorder(1002)
ax2.grid(True)
ax2.set_ylabel("main")
axx2.get_yaxis().set_visible(False)

(注:修正了原代码中1:10这类Python语法错误,替换为合法的range写法)

问题截图

问题截图

解决方案

核心逻辑是:先创建原始轴的图例,将其从原始轴移除后添加到双轴对象上。由于双轴的绘制层级高于原始轴,添加到双轴的图例会自动显示在最顶层,同时不会影响原始轴网格的显示。

解决后代码

import matplotlib.pyplot as plt

fig2, ax1 = plt.subplots()
fig2.set_size_inches(18/1.5, 10/1.5)
ax2 = ax1.twinx()

# 绘制原始轴内容与网格
ax1.plot(range(1,11), range(1,11), label="main", linestyle="-")
ax1.grid(True)

# 绘制双轴内容
ax2.plot(range(1,11), [100 for i in range(1,11)], label="second", linestyle="--")

# 调整图例层级,使其显示在顶层
legend_1 = ax1.legend(loc="center left", borderaxespad=1.)
legend_1.remove()
ax2.add_artist(legend_1)

plt.show()

(注:补充了必要的导入语句与显示代码,修正了语法细节)


内容的提问来源于stack exchange,提问作者jjjjjj

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 17:23:30