首页 > 解决方案 > 如何使用 matplotlib 中的子图控制紧凑图形的确切大小?

问题描述

我编写了这段代码来生成一个子图网格,该网格具有以英寸为单位指定的特定图形大小。第 12 行指定图形宽度(约 150mm)。

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec

def img(fig,grid):
    ax = fig.add_subplot(grid)
    plot = ax.pcolormesh(np.random.random((10,10)), vmin=0, vmax=1)
    return ax,plot

rows = 3
cols = 4 
x_inches = 5.905            # ~150mm
y_inches = x_inches*(rows/cols)
dpi = 96

fig = plt.figure(1, figsize = (x_inches,y_inches), dpi = dpi)
layout = gridspec.GridSpec(ncols = cols, nrows = rows, figure = fig)

for m in range(rows):
    for n in range(cols):
        img(fig,layout[m,n])

plt.subplots_adjust(hspace = 0.4, wspace = 0.4)    
plt.savefig('example.pdf', dpi = dpi, bbox_inches='tight', pad_inches = 0)
plt.show()`

该代码会生成一个 .pdf 文件,其中包含矢量图:

在此处输入图像描述

但是,当我查看 .pdf 文件的文档属性时,它说这个数字是 125.4 x 93.9 毫米

通过将第 24 行更改为:plt.savefig('example.pdf', dpi = dpi, pad_inches = 0)

结果数字是:

在此处输入图像描述

在这种情况下,该图具有我设置的尺寸,但是没有紧密的方面。

如何生成具有指定大小和紧凑框的图形?

提前致谢!

标签: pythonmatplotlib

解决方案


推荐阅读