我试图在这里实现的最终目标是将图形保存为具有特定大小的.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。
但我在使用GridSpec创建子图的数字方面遇到了麻烦。奇怪的是,只有在为GridSpec设置自定义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')
我添加了一些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
有没有人知道解决这个问题的方法,或者更好的方法来做我尝试的事情?
答案 0 :(得分:0)
如果目的是保存图像,则可以省略图中的tight_layout参数,并在保存图形时使用参数bbox_inches='tight', pad_inches=0
:
plt.savefig('figure.pdf', bbox_inches='tight', pad_inches=0)