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

如何在Python中无需重绘即可并排/叠加展示已绘制的Matplotlib图形

在Jupyter Notebook中并排展示已有的Matplotlib图形对象

下面提供两种无需重新绘制图形的实现方式,适配你的需求:

方法一:转为静态图片并排展示(简单通用)

这种方式无需修改原图形的绘制逻辑,直接将已保存的fig1、fig2转为图片后并排显示,适配所有类型的Matplotlib图形:

from IPython.display import display, Image
import io

# 把fig1转为内存中的图片对象
buf1 = io.BytesIO()
fig1.savefig(buf1, format='png')
buf1.seek(0)
img1 = Image(buf1)

# 把fig2转为内存中的图片对象
buf2 = io.BytesIO()
fig2.savefig(buf2, format='png')
buf2.seek(0)
img2 = Image(buf2)

# 并排展示两张图片
display(img1, img2)

方法二:保留交互性的图形合并

如果需要保留Matplotlib图形的交互功能(比如缩放、平移),可以创建新画布,将原有图形的元素复制到新画布的子图中:

import matplotlib.pyplot as plt

# 创建1行2列的新画布
new_fig, (ax_left, ax_right) = plt.subplots(1, 2, figsize=(12, 5))

# 复制fig1的图形元素到左侧子图
src_ax1 = fig1.axes[0]
for line in src_ax1.get_lines():
    ax_left.plot(line.get_xdata(), line.get_ydata(), **line.get_properties())
# 同步坐标轴标签、标题等属性
ax_left.set_xlabel(src_ax1.get_xlabel())
ax_left.set_ylabel(src_ax1.get_ylabel())
ax_left.set_title(src_ax1.get_title())
ax_left.legend(src_ax1.get_legend_handles_labels()[0], src_ax1.get_legend_handles_labels()[1])

# 复制fig2的图形元素到右侧子图
src_ax2 = fig2.axes[0]
for line in src_ax2.get_lines():
    ax_right.plot(line.get_xdata(), line.get_ydata(), **line.get_properties())
ax_right.set_xlabel(src_ax2.get_xlabel())
ax_right.set_ylabel(src_ax2.get_ylabel())
ax_right.set_title(src_ax2.get_title())
ax_right.legend(src_ax2.get_legend_handles_labels()[0], src_ax2.get_legend_handles_labels()[1])

# 自动调整布局
new_fig.tight_layout()
plt.show()

注:方法二如果原图形包含注释、色块等复杂元素,需要针对性补充复制逻辑,适合结构简单的图形场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 20:55:19