Matplotlib Gridspec-A4页面上的图和图像

时间:2019-06-30 10:20:14

标签: python matplotlib

对于我的学士论文,我想为我所做的一些计算结果创建一个摘要A4页面。
其中包括图像和布局,如下面的代码生成的那样。不幸的是,matplotlib使得图像非常小,图也非常宽。

如何使所有内容在2x6的网格中很好地对齐,例如在图像中显示为正方形,并且绘图的形状为1x2并以纵向保存?

Desired Layout

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

mpl.use('pdf')

img = np.random.standard_normal((20,20))
data = np.linspace(0,1,10000)    

title_fontsize = 'x-small'
fig = plt.figure()
fig.figsize = (6*5, 2*5)

ax = np.zeros(8, dtype=object)
gs = fig.add_gridspec(8, 2, width_ratios=[1,1])
ax[0] = fig.add_subplot(gs[0, 0])
ax[1] = fig.add_subplot(gs[0, 1])
ax[2] = fig.add_subplot(gs[1:3, :])
ax[3] = fig.add_subplot(gs[3, :])
ax[4] = fig.add_subplot(gs[4, 0])
ax[5] = fig.add_subplot(gs[4, 1])
ax[6] = fig.add_subplot(gs[5, :])
ax[7] = fig.add_subplot(gs[6, :])

ax[0].imshow(img)
ax[0].set_title('Covariance Operator', fontsize = title_fontsize)

ax[1].imshow(img)
ax[1].set_title('Sample', fontsize = title_fontsize)

ax[2].imshow(img)
ax[2].set_title('Truth', fontsize = title_fontsize)

ax[3].plot(data)
ax[3].set_title('Measurement', fontsize = title_fontsize)

ax[4].imshow(img)
ax[4].set_title('MCMC Reconstruction', fontsize = title_fontsize)

ax[5].imshow(img)
ax[5].set_title('FBP Reconstruction', fontsize = title_fontsize)

ax[6].plot(data)
ax[6].set_title('Heightscale', fontsize = title_fontsize)

ax[7].plot(data)
ax[7].set_title('Jump Size', fontsize = title_fontsize)

for x in ax.flat:
    for tick in x.xaxis.get_major_ticks():
        tick.label.set_fontsize('xx-small')
    for tick in x.yaxis.get_major_ticks():
        tick.label.set_fontsize('xx-small')

plt.savefig('test.pdf')

作为参考,这是现在的输出:

Current output (with real data)

1 个答案:

答案 0 :(得分:0)

所以我稍稍更改了布局,但是解决方案是将figsize设置为A4纸,并调整role="listitem"的高度比。此外,gs将宽度作为第一个参数,然后将高度作为

fig.set_size_inches

还有图片供参考:

Correct Layout