您可以很容易地在代码中更改的一件事就是fontsize
您正在使用标题。但是,我将假设您不只是想这样做!
一些替代使用fig.subplots_adjust(top=0.85)
:
通常tight_layout()
,在将所有内容放置在合适的位置方面做得很好,以免它们重叠。tight_layout()
在这种情况下无济于事的原因是因为tight_layout()
没有考虑到fig.suptitle()。GitHub上有一个未解决的问题:https : //github.com/matplotlib/matplotlib/issues/829 [由于需要完整的几何管理器,于2014年关闭-移至https://github.com/matplotlib/matplotlib / issues / 1109 ]。
如果您阅读该线程,则可以解决涉及的问题GridSpec
。关键是在tight_layout
使用rect
kwarg 调用时,在图的顶部保留一些空间。对于您的问题,代码变为:
使用GridSpec
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
f = np.random.random(100)
g = np.random.random(100)
fig = plt.figure(1)
gs1 = gridspec.GridSpec(1, 2)
ax_list = [fig.add_subplot(ss) for ss in gs1]
ax_list[0].plot(f)
ax_list[0].set_title('Very Long Title 1', fontsize=20)
ax_list[1].plot(g)
ax_list[1].set_title('Very Long Title 2', fontsize=20)
fig.suptitle('Long Suptitle', fontsize=24)
gs1.tight_layout(fig, rect=[0, 0.03, 1, 0.95])
plt.show()
结果:
可能GridSpec
对您来说有点过大,否则您的实际问题将涉及在更大的画布上进行更多的子图绘制或其他复杂情况。一个简单的技巧是仅使用annotate()
并将其锁定'figure fraction'
到来模仿suptitle
。不过,一旦查看输出,您可能需要进行一些更精细的调整。请注意,这第二个解决方案并不能使用tight_layout()
。
更简单的解决方案(尽管可能需要微调)
fig = plt.figure(2)
ax1 = plt.subplot(121)
ax1.plot(f)
ax1.set_title('Very Long Title 1', fontsize=20)
ax2 = plt.subplot(122)
ax2.plot(g)
ax2.set_title('Very Long Title 2', fontsize=20)
# fig.suptitle('Long Suptitle', fontsize=24)
# Instead, do a hack by annotating the first axes with the desired
# string and set the positioning to 'figure fraction'.
fig.get_axes()[0].annotate('Long Suptitle', (0.5, 0.95),
xycoords='figure fraction', ha='center',
fontsize=24
)
plt.show()
结果:
[使用Python
2.7.3(64位)和matplotlib
1.2.0]