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

Jupyter Notebook中如何将Matplotlib生成的多图合并为单个子图保存?

解决Jupyter Notebook中合并Matplotlib子图的问题

直接赋值Axes对象行不通的原因很明确:每个Axes实例绑定在创建它的原始Figure上,你只是把newax[0]的变量指向改成了旧的prevax0,并没有把旧Axes的内容迁移到新Figure的子图中,所以新Figure只会显示空白。

下面提供两种可行的解决方案:

方案1:保存绘图数据,重新绘制(推荐)

这是最稳定可靠的方式,把每个单元格里绘图用到的数据、样式参数保存下来,最后在新的Figure里重新绘制子图。

示例步骤:

  1. 前面的单元格中,保存绘图数据和原Axes的样式信息:
import matplotlib.pyplot as plt
import numpy as np

# 第一个绘图单元格
x = np.linspace(0, 10, 100)
y_sin = np.sin(x)
fig1, ax_sin = plt.subplots()
ax_sin.plot(x, y_sin)
ax_sin.set_title('正弦曲线')
ax_sin.set_ylabel('sin(x)')
plt.show()

# 第二个绘图单元格
y_cos = np.cos(x)
fig2, ax_cos = plt.subplots()
ax_cos.plot(x, y_cos)
ax_cos.set_title('余弦曲线')
ax_cos.set_xlabel('x')
ax_cos.set_ylabel('cos(x)')
plt.show()
  1. 最后单元格中,用保存的数据重新绘制合并子图:
# 创建包含2个子图的新Figure
fig_combined, (ax1, ax2) = plt.subplots(2, 1, figsize=(8, 7))

# 重新绘制第一个子图,并复制原样式
ax1.plot(x, y_sin)
ax1.set_title(ax_sin.get_title())
ax1.set_ylabel(ax_sin.get_ylabel())

# 重新绘制第二个子图,并复制原样式
ax2.plot(x, y_cos)
ax2.set_title(ax_cos.get_title())
ax2.set_xlabel(ax_cos.get_xlabel())
ax2.set_ylabel(ax_cos.get_ylabel())

# 自动调整子图间距
plt.tight_layout()
# 保存为单个文件
plt.savefig('combined_plots.png', dpi=150)
plt.show()

方案2:将原有图表转为图像,在新子图中显示

如果不想重新编写绘图代码,可以把每个原有Figure渲染成图像,再放到新的子图中展示:

import matplotlib.pyplot as plt
from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
import numpy as np

# 假设前面已经创建了fig1(正弦图)和fig2(余弦图)

fig_combined, (ax_a, ax_b) = plt.subplots(2, 1, figsize=(8, 7))

# 处理第一个图:转为图像后显示
canvas1 = FigureCanvas(fig1)
canvas1.draw()
img1 = np.array(canvas1.renderer.buffer_rgba())
ax_a.imshow(img1)
ax_a.axis('off')  # 隐藏额外坐标轴,因为图像已包含原图表的坐标轴

# 处理第二个图:转为图像后显示
canvas2 = FigureCanvas(fig2)
canvas2.draw()
img2 = np.array(canvas2.renderer.buffer_rgba())
ax_b.imshow(img2)
ax_b.axis('off')

plt.tight_layout()
plt.savefig('combined_images.png', dpi=150)
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 09:47:41