How to adjust padding with cutoff or overlapping labels
Use:
import matplotlib.pyplot as pltplt.gcf().subplots_adjust(bottom=0.15)# alternate option without .gcfplt.subplots_adjust(bottom=0.15)
to make room for the label, where plt.gcf()
means get the current figure. plt.gca()
, which gets the current Axes
, can also be used.
Edit:
Since I gave the answer, matplotlib
has added the plt.tight_layout()
function.
See matplotlib Tutorials: Tight Layout Guide
So I suggest using it:
fig, axes = plt.subplots(ncols=2, nrows=2, figsize=(8, 6))axes = axes.flatten()for ax in axes: ax.set_ylabel(r'$\ln\left(\frac{x_a-x_b}{x_a-x_c}\right)$') ax.set_xlabel(r'$\ln\left(\frac{x_a-x_d}{x_a-x_e}\right)$')plt.tight_layout()plt.show()
In case you want to store it to a file, you solve it using bbox_inches="tight"
argument:
plt.savefig('myfile.png', bbox_inches="tight")
An easy option is to configure matplotlib to automatically adjust the plot size. It works perfectly for me and I'm not sure why it's not activated by default.
Method 1
Set this in your matplotlibrc file
figure.autolayout : True
See here for more information on customizing the matplotlibrc file: http://matplotlib.org/users/customizing.html
Method 2
Update the rcParams during runtime like this
from matplotlib import rcParamsrcParams.update({'figure.autolayout': True})
The advantage of using this approach is that your code will produce the same graphs on differently-configured machines.