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

如何将两个已有matplotlib Figure高质量并排拼接且不修改原图生成逻辑

Matplotlib两个已生成Figure横向高保真拼接方案

核心思路

无需修改原有绘图的生成逻辑,直接提取已有Figure的渲染数据绘制到新画布上,完全保留原始图像的分辨率/矢量属性,不会出现拼接后质量下降的问题。

实现代码

import matplotlib.pyplot as plt
import numpy as np

# 读取原有Figure的dpi参数,保证拼接后尺寸完全匹配
origin_dpi = fig1.dpi

# 创建目标画布:宽度2000px,高度1000px,dpi和原图保持一致
# figsize单位为英寸,需通过像素值/dpi换算得到
new_fig = plt.figure(
    figsize=(2000 / origin_dpi, 1000 / origin_dpi),
    dpi=origin_dpi
)

# 定义左右两个无边界子图区域,各占50%宽度
ax_left = new_fig.add_axes([0, 0, 0.5, 1])
ax_right = new_fig.add_axes([0.5, 0, 0.5, 1])

# 隐藏子图坐标轴,避免遮挡原有内容
ax_left.axis('off')
ax_right.axis('off')

# 渲染左侧图像(fig1)并绘制到左区域
fig1.canvas.draw()
left_img = np.array(fig1.canvas.renderer.buffer_rgba())
ax_left.imshow(left_img)

# 渲染右侧图像(fig2)并绘制到右区域
fig2.canvas.draw()
right_img = np.array(fig2.canvas.renderer.buffer_rgba())
ax_right.imshow(right_img)

# 导出拼接结果,pad_inches设为0去除多余白边
# 可保存为svg/pdf等矢量格式实现无损拼接
new_fig.savefig(
    "merged_figure.png",
    dpi=origin_dpi,
    bbox_inches="tight",
    pad_inches=0
)

注意事项

  • 操作前不要调用plt.close()关闭fig1、fig2,否则无法读取渲染数据
  • 如果两个原有Figure的dpi不同,可手动将origin_dpi设为统一值,避免尺寸变形
  • 如需在两张图之间留空隙,可调整add_axes的坐标参数,例如将右区域起始位置设为0.52,宽度设为0.48即可留出2%宽度的间隙

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 05:15:03