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

如何将Matplotlib中由固定函数生成的两个图表并排展示?

如何将两个独立生成的Matplotlib图表并排展示

你提到的尝试之所以无效,是因为每个Axes对象天生绑定到它创建时所属的Figure——直接给ax0[0]赋值ax1只是替换了数组里的引用,并没有把ax1从原来的fig1迁移到新的fig0中,所以最终显示的fig0还是空的子图。

下面给你两种可行的解决方案,分别适用于不同场景:

方法一:迁移现有Axes到新的布局Figure

这个方法直接把已生成的Axes从旧Figure移到新的并排布局Figure里,能完整保留原图表的所有样式和元素:

import matplotlib.pyplot as plt

# 假设你的plot_data函数已定义
def plot_data(data):
    fig, ax = plt.subplots(1, figsize=(5, 4))
    ax.plot(data)
    return fig, ax

# 生成两个独立图表
data1 = [1, 2, 3, 4, 5]
data2 = [5, 4, 3, 2, 1]
fig1, ax1 = plot_data(data1)
fig2, ax2 = plot_data(data2)

# 创建新的1x2布局Figure
fig0, axs = plt.subplots(1, 2, figsize=(12, 4))

# 步骤1:把原Axes从旧Figure中移除
fig1.delaxes(ax1)
fig2.delaxes(ax2)

# 步骤2:将原Axes添加到新Figure,并对齐子图位置
# 处理第一个子图
axs[0].remove()  # 先删除新Figure默认生成的空Axes
fig0.add_axes(ax1)
ax1.set_position(axs[0].get_position())  # 让原Axes匹配新布局的位置

# 处理第二个子图
axs[1].remove()
fig0.add_axes(ax2)
ax2.set_position(axs[1].get_position())

# 关闭旧的空Figure
plt.close(fig1)
plt.close(fig2)

# 展示最终并排图表
plt.show()

方法二:提取绘图数据,在新布局中重新绘制

如果迁移Axes的方式对你来说太繁琐,可以提取原图表中的绘图元素数据,在新的子图中重新绘制,适合需要微调样式的场景:

import matplotlib.pyplot as plt

# 同样先生成两个独立图表
data1 = [1, 2, 3, 4, 5]
data2 = [5, 4, 3, 2, 1]
fig1, ax1 = plot_data(data1)
fig2, ax2 = plot_data(data2)

# 创建新的1x2布局
fig0, (ax_left, ax_right) = plt.subplots(1, 2, figsize=(12, 4))

# 复制第一个图表的内容到新子图
for line in ax1.get_lines():
    # 提取线条的x/y数据和样式属性
    x, y = line.get_xdata(), line.get_ydata()
    style_props = line.get_properties()
    ax_left.plot(x, y, **style_props)
# 复制标题、坐标轴标签
ax_left.set_title(ax1.get_title())
ax_left.set_xlabel(ax1.get_xlabel())
ax_left.set_ylabel(ax1.get_ylabel())

# 复制第二个图表的内容到新子图
for line in ax2.get_lines():
    x, y = line.get_xdata(), line.get_ydata()
    style_props = line.get_properties()
    ax_right.plot(x, y, **style_props)
ax_right.set_title(ax2.get_title())
ax_right.set_xlabel(ax2.get_xlabel())
ax_right.set_ylabel(ax2.get_ylabel())

# 关闭旧Figure
plt.close(fig1)
plt.close(fig2)

plt.show()

补充说明

  • 方法一的优势是完全保留原图表的所有细节(包括图例、注释、自定义样式等),不需要额外处理元素属性;
  • 方法二更灵活,如果需要在并排时调整某个子图的样式(比如修改坐标轴范围、添加新元素),可以直接在新子图上操作;
  • 无论哪种方法,都要记得关闭旧的Figure,避免不必要的内存占用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 18:42:47