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
相关产品推荐
相关产品推荐

