One thing you can easily change in the code is the fontsize , which you use for titles. However, I'm going to suggest that you do not just want to do this!
Some alternatives to using fig.subplots_adjust(top=0.85) :
Normally tight_layout() does a pretty good job of positioning everything in good places so that they don't overlap. The reason tight_layout() does not help in this case, because tight_layout() does not take into account the value of fig.suptitle (). GitHub has an open problem: https://github.com/matplotlib/matplotlib/issues/829 [closed in 2014 due to the need for a full geometry manager - shifted to https://github.com/matplotlib/matplotlib/issues/ 1109 ].
If you are reading a stream, there is a solution to your problem involving GridSpec . The key should leave some space at the top of the picture when calling tight_layout using rect kwarg. For your problem, the code will look like this:
Using 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()
Result:

Maybe GridSpec little too much for you, or your real problem will include a lot more subplots on a much larger canvas or other complications. A simple hack is to simply use annotate() and lock the coordinates for the 'figure fraction' to mimic a suptitle . However, you may need to make some more subtle adjustments if you look at the result. Note that this second solution does not use tight_layout() .
Simplified solution (although it may need to be customized)
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()
Result:

[Using Python 2.7.3 (64-bit) and matplotlib 1.2.0]