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

如何使用Matplotlib设置四个坐标轴?求助绘制顶部、右侧轴带不同label与tick的图表

如何用Matplotlib设置四坐标轴并自定义顶/右侧轴的标签与刻度

没问题!我经常用Matplotlib做这类多轴可视化,下面给你一个完整的可运行示例,一步步实现你要的效果——同时显示四个坐标轴,并且顶部和右侧轴有独立的标签、刻度样式,甚至可以搭配不同的曲线。

完整示例代码

import matplotlib.pyplot as plt
import numpy as np

# 1. 生成示例数据(你可以替换成自己的业务数据)
x = np.linspace(0, 10, 100)
y_main = np.sin(x)  # 主y轴数据
y_right = np.cos(x) * 2  # 右侧y轴数据(放大2倍方便区分)
x_top = x ** 2  # 顶部x轴对应的数据(x的平方)

# 2. 创建主画布与主坐标轴(左下的基础轴)
fig, ax_main = plt.subplots(figsize=(8, 6))

# 3. 配置主坐标轴(左下)
ax_main.plot(x, y_main, color='#1f77b4', linewidth=2, label='sin(x)')
ax_main.set_xlabel('X Axis (Main)', fontsize=12, fontweight='bold')
ax_main.set_ylabel('Y Axis (Main)', fontsize=12, fontweight='bold')
ax_main.tick_params(axis='both', labelsize=10, grid_alpha=0.3)
ax_main.grid(True, linestyle='--')
ax_main.legend(loc='upper left')

# 4. 创建并配置顶部坐标轴(共享主轴的y轴)
ax_top = ax_main.twiny()  # 关键函数:创建共享y轴的顶部x轴
ax_top.set_xlabel('X Squared (Top Axis)', fontsize=12, fontweight='bold', color='#ff7f0e')
# 自定义顶部轴的刻度:和主x轴位置对应,但显示x平方的数值
ax_top.set_xticks(x[::20])  # 选取主x轴的部分刻度点
ax_top.set_xticklabels(np.round(x_top[::20], 1), color='#ff7f0e', fontsize=10)
ax_top.tick_params(axis='x', colors='#ff7f0e')

# 5. 创建并配置右侧坐标轴(共享主轴的x轴)
ax_right = ax_main.twinx()  # 关键函数:创建共享x轴的右侧y轴
ax_right.plot(x, y_right, color='#2ca02c', linewidth=2, linestyle='--', label='2*cos(x)')
ax_right.set_ylabel('Scaled Cosine (Right Axis)', fontsize=12, fontweight='bold', color='#2ca02c')
ax_right.tick_params(axis='y', labelsize=10, colors='#2ca02c')
ax_right.legend(loc='upper right')

# 6. 调整布局,避免标签重叠
plt.tight_layout()
plt.show()

关键知识点拆解

  • 核心函数:twiny() 和 twinx() 是实现四轴的关键。twiny() 创建一个与主坐标轴共享y轴的顶部x轴,twinx() 创建一个与主坐标轴共享x轴的右侧y轴,这样四个轴既关联(保证对齐)又独立可控。
  • 自定义刻度与标签:
    • 如果想让顶/右侧轴的刻度和主轴位置对应但显示不同内容(比如示例中顶轴显示x的平方),可以用set_xticks()指定主轴的刻度位置,再用set_xticklabels()替换成你需要的文本/数值。
    • 如果需要完全独立的刻度范围(和主轴无关联),直接用ax_top.set_xlim(min_val, max_val)定义自己的范围,再设置对应的刻度即可,比如:
      # 完全独立的顶部轴刻度示例
      ax_top.set_xlim(0, 100)
      ax_top.set_xticks([0, 25, 50, 75, 100])
      ax_top.set_xticklabels(['0', '25', '50', '75', '100'])
      
  • 样式区分:通过tick_params()设置刻度、标签的颜色,配合不同的曲线样式,可以让四个轴的内容清晰区分,避免混淆。

进阶提示

如果你的顶/右侧轴不需要绘制曲线,只是单纯显示刻度和标签,只需要跳过plot()步骤,直接配置标签和刻度即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:14:58