Matplotlib中figsize是否有上限?如何生成更大尺寸PNG图片?
问题:Matplotlib调整figsize后保存的PNG图片尺寸始终不变?
我尝试保存一张尺寸超过显示器分辨率的大图片,但增大figsize后生成的PNG图片尺寸始终相同。如下两个示例生成的文件完全一致:
第一个示例代码:
import matplotlib.pylab as plt fig, ax = plt.subplots(nrows=2, ncols=1, figsize=(10, 100)) ax[0].plot([0, 1], [0, 1]) ax[1].plot([0, 1], [0, 1]) fig.savefig('test1.png') plt.close()
第二个示例代码:
fig, ax = plt.subplots(nrows=2, ncols=1, figsize=(10, 150)) ax[0].plot([0, 1], [0, 1]) ax[1].plot([0, 1], [0, 1]) fig.savefig('test2.png') plt.close()
请问是否有办法生成更大尺寸的图片?
回答
这个问题我之前也碰到过,核心原因是Matplotlib的图片尺寸计算逻辑:figsize是英寸单位,最终图片的像素尺寸由「figsize × dpi」决定。你之前的代码只调整了figsize,但没有显式指定dpi参数,导致Matplotlib默认使用了与屏幕相关的固定dpi值(比如你的显示器dpi),所以即使figsize变大,最终像素尺寸也没变化。
解决这个问题很简单,有两种常用方法:
方法1:在savefig时显式指定dpi
直接在保存图片的时候传入dpi参数,自定义每英寸的像素数,这样就能按figsize的比例放大图片:
import matplotlib.pylab as plt fig, ax = plt.subplots(nrows=2, ncols=1, figsize=(10, 100)) ax[0].plot([0, 1], [0, 1]) ax[1].plot([0, 1], [0, 1]) fig.savefig('test1.png', dpi=100) # 这里指定dpi值,按需调整 plt.close()
方法2:创建Figure时就指定dpi
也可以在初始化子图的时候直接设置dpi,这样后续savefig会默认使用这个dpi值:
import matplotlib.pylab as plt fig, ax = plt.subplots(nrows=2, ncols=1, figsize=(10, 150), dpi=100) ax[0].plot([0, 1], [0, 1]) ax[1].plot([0, 1], [0, 1]) fig.savefig('test2.png') plt.close()
用这两种方法后,test1.png的像素尺寸会是10×100=1000宽 × 100×100=10000高,test2.png则是10×100=1000宽 × 150×100=15000高,尺寸差异就会体现出来了。如果需要更大的图片,你可以同时调大figsize和dpi,按需组合就能得到想要的像素尺寸。
内容的提问来源于stack exchange,提问作者mm441
相关产品推荐
相关产品推荐

