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

如何在普通Python3脚本中让Matplotlib适配Retina显示屏生成正确PNG?

在普通Python脚本中解决Matplotlib高DPI适配问题

要让Matplotlib生成符合预期像素尺寸的PNG图像,完全忽略系统DPI影响,可以通过以下几种方法实现:

方法1:全局禁用高DPI自动缩放

在脚本开头添加全局配置,强制Matplotlib不使用系统的高DPI设置:

import matplotlib
# 禁用高DPI自动缩放
matplotlib.rcParams['figure.dpi'] = 100
matplotlib.rcParams['savefig.dpi'] = 100
# 关闭后端的高DPI适配
matplotlib.rcParams['figure.autolayout'] = False
matplotlib.rcParams['figure.figsize'] = (1.5, 1.5)  # 单位为英寸

设置完成后,生成的图像尺寸会严格按照 figsize * dpi 计算,比如1.5英寸×100DPI就能得到150px的图像。

方法2:创建Figure时显式指定参数

如果不想修改全局配置,可在创建Figure对象时直接指定DPI和尺寸,同时规避高DPI适配:

import matplotlib.pyplot as plt

# 创建Figure时显式设置dpi,避免系统DPI干扰
fig = plt.figure(figsize=(1.5, 1.5), dpi=100)
# 绘制你的内容
plt.plot([1, 2, 3], [4, 5, 6])
# 保存时指定与创建时一致的dpi
plt.savefig('output.png', dpi=100, bbox_inches='tight')
plt.close()

注意保存时的dpi必须和创建Figure时的dpi保持一致,防止出现额外缩放。

方法3:直接指定目标像素尺寸

如果需要精准控制像素大小,可以通过像素数反推英寸尺寸(像素数/DPI),再结合固定DPI实现:

import matplotlib.pyplot as plt

target_width_px = 150
target_height_px = 150
dpi = 100

# 计算对应的英寸尺寸
figsize = (target_width_px / dpi, target_height_px / dpi)

fig = plt.figure(figsize=figsize, dpi=dpi)
# 绘制内容
plt.plot([1, 2, 3], [4, 5, 6])
plt.savefig('output.png', dpi=dpi)
plt.close()

这种方式能完全摆脱系统DPI的影响,生成精确像素尺寸的图像。

关键提示

  • Matplotlib默认会读取系统的DPI设置(比如高DPI屏幕的200%缩放),自动调整渲染DPI,这就是你设置100DPI却得到300px图像的原因。
  • 只要显式同步设置figure.dpi和savefig.dpi为同一值,就能绕过系统DPI绑定,让图像尺寸严格遵循figsize × dpi的计算逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 04:10:30