How do I extend the margin at the bottom of a figure in Matplotlib?

MatplotlibMargin

Matplotlib Problem Overview


The following screenshot shows my x-axis.

enter image description here

I added some labels and rotated them by 90 degrees in order to better read them. However, pyplot truncates the bottom such that I'm not able to completely read the labels. How do I extend the bottom margin in order to see the complete labels?

Matplotlib Solutions


Solution 1 - Matplotlib

Two retroactive ways:

fig, ax = plt.subplots()
# ...
fig.tight_layout()

Or

fig.subplots_adjust(bottom=0.2) # or whatever

Here's a subplots_adjust example: http://matplotlib.org/examples/pylab_examples/subplots_adjust.html

(but I prefer tight_layout)

Solution 2 - Matplotlib

A quick one-line solution that has worked for me is to use pyplot's auto [tight_layout method][1] directly, available in Matplotlib v1.1 onwards:

plt.tight_layout()

This can be invoked immediately before you show the plot (plt.show()), but after your manipulations on the axes (e.g. ticklabel rotations, etc).

This convenience method avoids manipulating individual figures of subplots.

Where plt is the standard pyplot from: import matplotlib.pyplot as plt

[1]: http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.tight_layout "Matplotlib Pyplot Tight Layout Documentation"

Solution 3 - Matplotlib

fig.savefig('name.png', bbox_inches='tight')

works best for me, since it doesn't reduce the plot size compared to

fig.tight_layout()

Solution 4 - Matplotlib

Subplot-adjust did not work for me, since the whole figure would just resize with the labels still out of bounds.

A workaround I found was to keep the y-axis always a certain margin over the highest or minimum y-values:

x1,x2,y1,y2 = plt.axis()
plt.axis((x1,x2,y1 - 100 ,y2 + 100))

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestiontoomView Question on Stackoverflow
Solution 1 - MatplotlibPaul HView Answer on Stackoverflow
Solution 2 - MatplotlibchinnychinchinView Answer on Stackoverflow
Solution 3 - MatplotlibMarcelView Answer on Stackoverflow
Solution 4 - MatplotlibrainerView Answer on Stackoverflow