如何在tight_layout失败时减少水平子图间距?
我正在尝试在matplotlib中创建一个包含多个子图的单一图形,这些子图的行和列跨度各不相同,使用的是subplot2grid。
比如,下面这段代码:
import matplotlib.pyplot as plt
import numpy as n
fig = plt.figure()
ax1 = plt.subplot2grid((2, 5), (0, 0), rowspan=2, colspan=2)
ax2 = plt.subplot2grid((2, 5), (0, 2))
ax2_2 = plt.subplot2grid((2, 5), (0, 3))
ax2_3 = plt.subplot2grid((2, 5), (0, 4))
ax3 = plt.subplot2grid((2, 5), (1, 2), colspan=3) #, sharex=ax2)
xs = n.linspace(0, 2*n.pi, 100)
ax1.plot(xs, n.sin(xs))
ax2.plot(xs, n.cos(xs))
ax2_2.plot(xs, n.tan(xs))
ax2_3.plot(xs, n.sin(xs))
ax3.plot(xs, n.cos(xs))
ax2.set_xticklabels([])
ax2.set_yticklabels([])
ax2_2.set_xticklabels([])
ax2_2.set_yticklabels([])
ax2_3.set_xticklabels([])
ax2_3.set_yticklabels([])
# This comes from a separate attempt to make the ticks invisible, but seems to make no change.
plt.setp(ax2.get_xticklabels(), visible=False)
plt.setp(ax2.get_yticklabels(), visible=False)
plt.setp(ax2_2.get_xticklabels(), visible=False)
plt.setp(ax2_2.get_yticklabels(), visible=False)
plt.setp(ax2_3.get_xticklabels(), visible=False)
plt.setp(ax2_3.get_yticklabels(), visible=False)
fig.set_size_inches(6.5, 2.85)
fig.tight_layout()
# I tried several things here - subplots_adjust improves the vertical spacing a little, but not the horizontal.
fig.subplots_adjust(hspace=0.1)
fig.savefig('test.png', dpi=100)
这段代码会生成一个像这样的图:
问题是右上角的三个单元格子图,每个的宽度大约只有可以放下的70%。虽然tight_layout可以很好地处理间距,但我搞不清楚为什么这个空间没有被填满,或者该如何解决这个问题。
所以……有没有人知道怎么做,让这些子图占满所有可用的宽度呢?
1 个回答
7
在使用 subplots_adjust()
这个函数时,hspace
参数可以用来调整上下的间距,而 wspace
参数则是用来调整左右的间距。所以,也许你需要的是:
fig.subplots_adjust(wspace=0.1)