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

Matplotlib设置的figsize在屏幕上显示尺寸不符的问题求助

Matplotlib设置的figsize在屏幕上显示尺寸不符的问题求助

我最近碰到一个挺头疼的问题:想生成一个10×10厘米的Matplotlib图,但实际显示的尺寸完全不对——在一台屏幕上显示是12.2cm×7.0cm,导出成PDF用Acrobat Reader打开后更是变成了13.5cm×7.8cm。我两台Windows电脑的屏幕缩放都设置为100%,按理说不该有屏幕缩放的问题啊?关键是我不光要PDF导出准确,更希望在屏幕上就能看到符合设置尺寸的Matplotlib图。

我的代码如下:

import matplotlib.pyplot as plt

cm = 1/2.54

fig = plt.figure(figsize = (10 * cm, 10 * cm))

plt.show()

fig.savefig("test.pdf")

解决思路和方案

这个问题的核心是Matplotlib的后端显示与系统DPI设置不匹配,即使系统缩放是100%,Matplotlib可能还是读取了逻辑DPI而非物理DPI,导致显示尺寸偏差。试试下面几个方法:

  • 显式指定屏幕实际DPI
    先查看你屏幕的实际DPI(Windows可以在「显示设置」里找到“每英寸点数(DPI)”,常见值为96、100等),然后在代码中明确设置Matplotlib的DPI:

    import matplotlib.pyplot as plt
    
    # 替换成你屏幕的实际DPI
    screen_dpi = 96
    cm = 1/2.54
    
    plt.rcParams['figure.dpi'] = screen_dpi
    
    fig = plt.figure(figsize=(10*cm, 10*cm))
    plt.show()
    
    # 导出PDF时可单独设置高DPI保证清晰度
    fig.savefig("test.pdf", dpi=300)
    
  • 更换适配更好的后端
    部分后端对系统DPI的适配更准确,比如Qt系列后端,你可以在代码开头指定:

    import matplotlib
    matplotlib.use('Qt5Agg')  # 也可以尝试Qt6Agg
    import matplotlib.pyplot as plt
    
    cm = 1/2.54
    fig = plt.figure(figsize=(10*cm, 10*cm))
    plt.show()
    
  • 关闭自动高DPI缩放
    有时候Matplotlib会自动启用高DPI缩放,尝试关闭它来强制匹配设置的尺寸:

    import matplotlib.pyplot as plt
    
    plt.rcParams['figure.autolayout'] = False
    plt.rcParams['figure.dpi'] = 'physical'
    
    cm = 1/2.54
    fig = plt.figure(figsize=(10*cm, 10*cm))
    plt.show()
    

备注:内容来源于stack exchange,提问作者NablaDelta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 07:13:06