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

Matplotlib中如何设置双XY坐标轴?非twinx()/twiny()方案

在Matplotlib中不使用twinx()/twiny()创建双XY坐标轴

可以直接通过创建独立的坐标轴对象实现需求,核心是在同一绘图区域叠加第二个坐标轴,手动调整其轴的显示位置。以下是具体实现代码:

import matplotlib.pyplot as plt
import numpy as np

# 生成示例数据
x1 = np.linspace(0, 10, 100)
y1 = np.sin(x1)
x2 = np.linspace(0, 20, 100)
y2 = np.cos(x2) * 5

# 创建画布和第一个坐标轴(常规位置)
fig, ax1 = plt.subplots()
ax1.plot(x1, y1, color='blue', label='Dataset 1')
ax1.set_xlabel('X1 Axis')
ax1.set_ylabel('Y1 Axis')
ax1.legend(loc='upper left')

# 创建与ax1位置完全重合的第二个坐标轴
ax2 = fig.add_axes(ax1.get_position(), frameon=False)
# 设置ax2的刻度和标签位置
ax2.xaxis.set_ticks_position('top')
ax2.yaxis.set_ticks_position('right')
ax2.xaxis.set_label_position('top')
ax2.yaxis.set_label_position('right')

# 绘制第二组数据
ax2.plot(x2, y2, color='red', label='Dataset 2')
ax2.set_xlabel('X2 Axis')
ax2.set_ylabel('Y2 Axis')
ax2.legend(loc='upper right')

plt.show()

关键逻辑说明:

  • fig.add_axes(ax1.get_position(), frameon=False):创建与第一个坐标轴位置完全一致的第二个坐标轴,frameon=False避免重复显示边框。
  • 调用xaxis.set_ticks_position和yaxis.set_ticks_position,将第二组数据的刻度分别移到顶部和右侧。
  • 通过xaxis.set_label_position和yaxis.set_label_position,把坐标轴标签也对应调整到顶部和右侧。

两组坐标轴会各自适配对应数据的范围,完全独立于彼此。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 09:36:21