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

如何用Matplotlib创建含两个双Y轴子图的图表?

创建带双Y轴的多子图(Matplotlib)

当你需要创建多个带双Y轴的子图时,只需在多子图布局的基础上,给每个子图单独调用twinx()生成双Y轴即可,核心逻辑和单个图表的双Y轴操作一致。

核心步骤说明

  1. 用plt.subplots()指定子图布局:比如创建2行1列的子图,使用fig, axes = plt.subplots(nrows=2, ncols=1),此时axes是包含两个轴对象的数组,每个元素对应一个子图的主Y轴。
  2. 对每个子图的主轴,调用twinx()生成对应的副Y轴,分别配置各自的曲线、标签和样式。

完整示例代码

import matplotlib.pyplot as plt
import numpy as np

# 生成示例数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.exp(x/10)
y3 = np.cos(x)
y4 = np.log(x+1)

# 创建2行1列的子图布局,设置整体尺寸
fig, axes = plt.subplots(nrows=2, ncols=1, figsize=(8, 10))

# 处理第一个子图
ax1 = axes[0]
# 主Y轴曲线
ax1.plot(x, y1, color='tab:blue', label='正弦曲线')
ax1.set_xlabel('X轴')
ax1.set_ylabel('左侧Y轴', color='tab:blue')
ax1.tick_params(axis='y', labelcolor='tab:blue')
ax1.legend(loc='upper left')

# 第一个子图的副Y轴
ax1_twin = ax1.twinx()
ax1_twin.plot(x, y2, color='tab:orange', label='指数曲线')
ax1_twin.set_ylabel('右侧Y轴', color='tab:orange')
ax1_twin.tick_params(axis='y', labelcolor='tab:orange')
ax1_twin.legend(loc='upper right')

# 处理第二个子图
ax2 = axes[1]
# 主Y轴曲线
ax2.plot(x, y3, color='tab:green', label='余弦曲线')
ax2.set_xlabel('X轴')
ax2.set_ylabel('左侧Y轴', color='tab:green')
ax2.tick_params(axis='y', labelcolor='tab:green')
ax2.legend(loc='upper left')

# 第二个子图的副Y轴
ax2_twin = ax2.twinx()
ax2_twin.plot(x, y4, color='tab:red', label='对数曲线')
ax2_twin.set_ylabel('右侧Y轴', color='tab:red')
ax2_twin.tick_params(axis='y', labelcolor='tab:red')
ax2_twin.legend(loc='upper right')

# 自动调整子图间距,避免标签重叠
fig.tight_layout()
plt.show()

关键注意事项

  • 区分每个子图的轴对象:不要混淆axes[0]和axes[1]对应的子图,各自的副Y轴也独立生成
  • 为不同Y轴设置不同颜色,方便区分数据
  • 使用legend()时指定位置,避免曲线和图例重叠

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 12:55:22