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
相关产品推荐
相关产品推荐

