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

Matplotlib多轴绘图中轴元素混乱问题求助

Matplotlib多轴绘图中轴元素混乱问题求助

嘿,我仔细看了你的代码,发现问题出在多轴创建的逻辑和轴的定位设置上,尤其是ax4的处理导致了刻度和标签的混乱:你想把绿色的ax4轴放在左侧,但twinx()默认是创建右侧共享x轴的轴,直接调整左侧spine的位置会和原本的ax1以及其他twinx轴的设置冲突,才出现了刻度丢失、标签重复的情况。

我给你调整了代码,主要修改了ax4的创建和设置部分,确保每个轴的刻度、标签都能正确显示:

import numpy as np
import matplotlib.pyplot as plt

# Generate fake data
distance = np.logspace(2, 4, num=50)
a_detector = 10**4 / distance**1.5
b_detector = 10**5 / distance**1.6
c_detector = 10**3 / distance**1.4
d_detector = 10**2 / distance**1.2

# Create figure and axes
fig, ax1 = plt.subplots(figsize=(20, 10))

ax1.plot(distance, a_detector, 'bo-', label='A')
ax1.set_xlabel('Shower Plane Distance [meter]')
ax1.set_ylabel('signal type I', color='blue')
ax1.set_xscale('log')
ax1.set_yscale('log')
ax1.tick_params(axis='y', labelcolor='blue')

ax2 = ax1.twinx()
ax2.plot(distance, b_detector, 'ro-', label='B')
ax2.set_ylabel('signal type II', color='red')
ax2.set_yscale('log')
ax2.tick_params(axis='y', labelcolor='red')

ax3 = ax1.twinx()
ax3.spines['right'].set_position(('outward', 90))
ax3.plot(distance, c_detector, 'ks-', label='C')
ax3.set_ylabel('signal type III', color='black')
ax3.set_yscale('log')
ax3.tick_params(axis='y', labelcolor='black')

# 修改ax4的创建和设置部分
ax4 = ax1.twinx()
# 隐藏ax4的右侧spine,因为我们要把它放到左侧
ax4.spines['right'].set_visible(False)
# 把左侧spine向外偏移,避免和ax1的蓝色轴重叠
ax4.spines['left'].set_position(('outward', 90))
ax4.spines['left'].set_visible(True)
ax4.plot(distance, d_detector, 'g^-', label='D')
ax4.set_ylabel('signal type IV', color='green')
ax4.set_yscale('log')
# 确保刻度和标签显示在左侧,颜色为绿色
ax4.tick_params(axis='y', labelcolor='green', left=True, labelleft=True)
# 把y轴标签位置设为左侧
ax4.yaxis.set_label_position('left')

# 调整图例位置,避免和轴重叠
fig.legend(loc='upper right', bbox_to_anchor=(0.92, 0.86))
plt.show()

关键修改点说明:

  • 给ax4添加了ax4.spines['right'].set_visible(False),隐藏默认的右侧轴,避免和其他右侧轴冲突
  • 显式设置ax4.spines['left'].set_visible(True),确保左侧spine显示出来
  • 调整了tick_params的参数,明确指定left=True和labelleft=True,强制刻度和标签显示在左侧
  • 微调了图例的位置,让它不被新增的左侧轴挡住

这样修改后,每个轴的刻度、标签都会正确显示,不会再出现混乱的情况啦!

备注:内容来源于stack exchange,提问作者Fuegon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 14:42:59