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

如何在单个Figure中创建两个子图:多曲线子图与单曲线子图

解决Matplotlib左右分栏子图布局问题

要实现左右分栏的子图布局,核心是明确指定每个曲线所属的子图对象,而不是直接用全局的plt.plot(它会默认绘制在当前活跃的子图上)。以下是完整的实现代码和说明:

步骤1:导入依赖库

import numpy as np
import matplotlib.pyplot as plt

步骤2:准备数据

  • 左侧子图A的x范围(0,5),生成足够多的点保证曲线平滑:
x_a = np.linspace(0, 5, 100)
y1 = x_a
y2 = 2 * x_a - 1
y3 = 3 * x_a**2 + 2 * x_a - 1
  • 右侧子图B的x范围(-0.5,0.5),注意要避开x=0(避免3*pi/x出现除以0错误):
x_b = np.linspace(-0.5, 0.5, 2000)
# 过滤掉x=0的点
x_b = x_b[x_b != 0]
y_b = np.sin(3 * np.pi / x_b)

步骤3:创建分栏子图并绘制曲线

使用plt.subplots创建1行2列的子图布局,得到两个子图对象ax1(左侧)和ax2(右侧),然后分别在对应子图上调用plot方法:

# 创建1行2列的子图,figsize设置整体画布大小
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5))

# 左侧子图A绘制3条曲线
ax1.plot(x_a, y1, label='y=x')
ax1.plot(x_a, y2, label='y=2x-1')
ax1.plot(x_a, y3, label='y=3x²+2x-1')
# 添加图例、标题和坐标轴标签
ax1.legend()
ax1.set_title('子图A')
ax1.set_xlabel('x')
ax1.set_ylabel('y')

# 右侧子图B绘制曲线
ax2.plot(x_b, y_b, color='red')
ax2.set_title('子图B')
ax2.set_xlabel('x')
ax2.set_ylabel('y')

# 调整子图间距,避免标签重叠
plt.tight_layout()
# 显示图像
plt.show()

关键说明

  • 之前的问题根源是:直接调用plt.plot会默认使用当前的子图(初始是第一个子图),所以所有曲线都画在了同一个子图里。
  • 通过获取子图对象ax1、ax2,并调用它们的plot方法,就能精准控制每个曲线的绘制位置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 20:22:15