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

使用twinx()绘制多轴图时x轴网格不显示的解决咨询

问题解决:多轴绘图中X轴网格不显示且置于背景层

问题根源

  1. 由于ax2 = ax1.twinx()是共享X轴的副轴,X轴的控制权属于ax1,在ax2上开启X轴网格不会生效。
  2. 原代码中ax1.grid(False)直接关闭了ax1的所有网格(包括X轴),导致X轴网格完全不显示。
  3. 即使强行在ax2开启X轴网格,也会被zorder更高的ax1遮挡。

修改后的代码

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0,2*np.pi)
fx = 0.25* np.sin(x)**2
gx = 0.25* np.cos(x)**2

fig, ax1 = plt.subplots()

# 配置ax1:开启X轴网格,关闭Y轴网格,设置网格样式
ax1.xaxis.grid(True, color="g", linestyle='--', linewidth=0.5)
ax1.yaxis.grid(False)

# 绘制绿色曲线
ax1.plot(x, fx, color="g")
ax1.set_ylabel("f(x)", color="g")
for label in ax1.get_yticklabels():
    label.set_color("g")

# 创建共享X轴的副轴ax2
ax2 = ax1.twinx()
# 配置ax2:开启Y轴网格,设置样式
ax2.yaxis.grid(True, color="r", linestyle='--', linewidth=0.5)

# 绘制红色曲线
ax2.plot(x, gx, color="r", lw=2)
ax2.set_ylabel("g(x)", color="r")
for label in ax2.get_yticklabels():
    label.set_color("r")

# 调整层级:让ax1(带X轴网格)处于最底层,确保网格在两条曲线下方
ax1.set_zorder(ax2.get_zorder() - 1)
# 设置ax1背景透明,避免遮挡ax2内容
ax1.set_facecolor('none')
ax1.set_frame_on(False)

plt.show()

关键修改说明

  • X轴网格归属:在ax1上开启X轴网格,因为共享X轴的副轴无法控制X轴元素。
  • 层级调整:降低ax1的zorder,让网格处于最底层,两条曲线自然显示在网格上方。
  • 背景透明:设置ax1.set_facecolor('none')避免ax1的背景遮挡ax2的内容,同时保留set_frame_on(False)隐藏冗余边框。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 16:22:50