将GridSpec与自定义wspace一起使用并不适用于tight_layout

时间:2017-03-16 09:31:53

标签: matplotlib

我试图在这里实现的最终目标是将图形保存为具有特定大小的.pdf(在下面的示例代码中为[5,2]),轴标签外没有填充/刻度标签。

我通常通过使用figsize的组合创建一个图形并通过tight_layout将填充设置为零来实现此目的(我添加了灰色背景颜色以更好地显示边缘/填充):

fig = plt.figure(
    figsize = [5,2],
    tight_layout = {'pad': 0}
)

t = np.arange(0.0, 2.0, 0.01)
s = 1 + np.sin(2*np.pi*t)
plt.plot(t, s)

plt.savefig('figure.pdf', facecolor = (0.7,0.7,0.7))

这会创建一个大小为5x2的漂亮pdf。

enter image description here

但我在使用GridSpec创建子图的数字方面遇到了麻烦。奇怪的是,只有在为GridSpec设置自定义wspace时才会出现问题。

没有wspace的示例

fig, (ax0, ax1) = plt.subplots(
    nrows = 1, ncols = 2,
    gridspec_kw = {'width_ratios' : [3,2]},
    tight_layout = {'pad': 0},
    figsize = [5,2]
)

t = np.arange(0.0, 2.0, 0.01)
s = 1 + np.sin(2*np.pi*t)
ax0.plot(t, s)
ax1.plot(t, s)

ax1.yaxis.tick_right()

ax0.set_xlim([0, 2.25])
ax1.set_xlim([-0.25, 2])

plt.savefig('figure.pdf')

enter image description here

示例 with wspace

我添加了一些wspace以在子图之间留出一些空间,因为它们在上面的示例中非常接近

fig, (ax0, ax1) = plt.subplots(
    nrows = 1, ncols = 2,
    gridspec_kw = {'width_ratios' : [3,2], 'wspace' : 0.1},
    tight_layout = {'pad': 0},
    figsize = [5,2]
)

t = np.arange(0.0, 2.0, 0.01)
s = 1 + np.sin(2*np.pi*t)
ax0.plot(t, s)
ax1.plot(t, s)

ax1.yaxis.tick_right()

ax0.set_xlim([0, 2.25])
ax1.set_xlim([-0.25, 2])

plt.savefig('figure.pdf', facecolor = (0.7,0.7,0.7))

(上面唯一的变化是wspace添加到gridspec_kw dict)

这在savefig命令

中给出了错误
C:\Users\<username>\Anaconda3\lib\site-packages\matplotlib\figure.py:1744:
UserWarning: This figure includes Axes that are not compatible with
tight_layout, so its results might be incorrect.
  warnings.warn("This figure includes Axes that are not "
# the warning is cut off here for some reason

并生成以下图片,显然不使用tight_layout

enter image description here

有没有人知道解决这个问题的方法,或者更好的方法来做我尝试的事情?

1 个答案:

答案 0 :(得分:0)

如果目的是保存图像,则可以省略图中的tight_layout参数,并在保存图形时使用参数bbox_inches='tight', pad_inches=0

plt.savefig('figure.pdf', bbox_inches='tight', pad_inches=0)