不同系统下Matplotlib的dpi问题及图像尺寸差异求助
解决Matplotlib跨版本plt.savefig尺寸不一致问题
核心原因
不同Matplotlib版本中,plt.savefig的默认行为(比如dpi传递逻辑、边界处理规则)存在细微差异,即使fig.get_size_inches()和dpi返回值一致,最终输出图像的实际尺寸也可能出现偏差。
具体解决建议
统一Matplotlib版本
- 先确认两端版本:
import matplotlib; print(matplotlib.__version__) - 将本地版本对齐到Colab的版本,执行
pip install matplotlib==<Colab版本号>(比如Colab用3.7.1就装matplotlib==3.7.1);也可以选择升级本地到最新稳定版,确保行为统一。
- 先确认两端版本:
显式指定所有尺寸相关参数
避免依赖版本默认值,在代码中强制声明关键参数:# 创建figure时显式设置尺寸和dpi fig = plt.figure(figsize=(6, 4), dpi=72) # 绘图逻辑... # 保存时强制指定dpi和边界参数 plt.savefig('output.png', dpi=72, bbox_inches='tight', pad_inches=0)注意:旧版本中
savefig的dpi默认可能不继承figure的dpi,显式指定可消除这个差异。统一全局配置参数
在代码开头覆盖Matplotlib的默认rcParams,确保跨版本配置一致:import matplotlib.pyplot as plt # 统一基础配置 plt.rcParams['figure.figsize'] = (6, 4) plt.rcParams['figure.dpi'] = 72 plt.rcParams['savefig.dpi'] = 72验证输出结果
保存后检查图像实际像素尺寸,确保和Colab输出一致:from PIL import Image img = Image.open('output.png') print(img.size) # 预期输出(432, 288)
内容的提问来源于stack exchange,提问作者PiEmmeC
相关产品推荐
相关产品推荐

