You need to enable JavaScript to run this app. Matplotlib 如何保存无侧边填充的n_pixel×n_pixel正方形图像
优惠活动
大模型
产品
解决方案
定价
更多

Matplotlib 如何保存无侧边填充的n_pixel×n_pixel正方形图像

Matplotlib 导出正方形无填充图像的实现方案

核心需求

使用Matplotlib导出图像时需要同时满足两个约束:

  • 导出图像为严格的正方形像素尺寸,两个维度的像素数量完全一致
  • 导出图像边缘不存在任何多余填充区域

初始代码的问题

最初的测试代码运行后,默认导出288x288像素的正方形图像,但边缘存在多余填充:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 2 * np.pi, 400)
y = np.sin(x ** 2)
fig, ax = plt.subplots(figsize=(4,4))
ax.set_ylim(-1, 1)
ax.axis('off')
ax.plot(x,y)
fig.savefig("try.png",                   
            #pad_inches=-0.2
            #bbox_inches='tight'
           )
plt.close(fig)

带填充的导出示例图

如果开启savefig方法中的bbox_inches='tight'参数,虽然可以消除边缘填充,但导出的图像尺寸会变为237x231像素,不再满足正方形尺寸要求。
无填充但尺寸非正方形的导出示例图

可行解决方法

经过测试,添加fig.subplots_adjust(left=0, right=1, bottom=0, top=1)配置即可同时满足两项约束,调整后的完整代码如下:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 2 * np.pi, 400)
y = np.sin(x ** 2)
fig, ax = plt.subplots(figsize=(4,4))
ax.set_ylim(-1, 1)
ax.axis('off')
ax.plot(x,y)

# 关键配置:让绘图区完全占满整个画布,消除默认预留边距
fig.subplots_adjust(left=0, right=1, bottom=0, top=1)
fig.savefig("try.png",                   
            #pad_inches=-0.2
            bbox_inches='tight'
           )
plt.close(fig)

配置逻辑说明:默认状态下Matplotlib的绘图区不会完全占满画布,会在四周预留固定边距。开启bbox_inches='tight'时会自动裁剪掉所有非绘图区的边距,若绘图区本身的占比不是正方形,裁剪后的图像就会出现长宽不等的问题。将绘图区边距全部设为0、让绘图区刚好占满正方形画布后,再做裁剪操作,就不会出现长宽偏差,最终导出的图像既无多余填充,也能保持严格的正方形像素尺寸。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.04 16:27:05