## The Question :

*351 people think this question is useful*

I am plotting a dataset using `matplotlib`

where I have an xlabel that is quite “tall” (it’s a formula rendered in TeX that contains a fraction and is therefore has the height equivalent of a couple of lines of text).

In any case, the bottom of the formula is always cut off when I draw the figures. Changing figure size doesn’t seem to help this, and I haven’t been able to figure out how to shift the x-axis “up” to make room for the xlabel. Something like that would be a reasonable temporary solution, but what would be nice would be to have a way to make matplotlib recognize automatically that the label is cut off and resize accordingly.

Here’s an example of what I mean:

import matplotlib.pyplot as plt
plt.figure()
plt.ylabel(r'$\ln\left(\frac{x_a-x_b}{x_a-x_c}\right)$')
plt.xlabel(r'$\ln\left(\frac{x_a-x_d}{x_a-x_e}\right)$')
plt.show()

while you can see the entire ylabel, the xlabel is cut off at the bottom.

In the case this is a machine-specific problem, I am running this on OSX 10.6.8 with matplotlib 1.0.0

*The Question Comments :*

## The Answer 1

*530 people think this answer is useful*

Use:

import matplotlib.pyplot as plt
plt.gcf().subplots_adjust(bottom=0.15)

to make room for the label.

Edit:

Since i gave the answer, `matplotlib`

has added the `tight_layout()`

function.
So i suggest to use it:

plt.tight_layout()

should make room for the xlabel.

## The Answer 2

*168 people think this answer is useful*

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 rcParams
rcParams.update({'figure.autolayout': True})

The advantage of using this approach is that your code will produce the same graphs on differently-configured machines.

## The Answer 3

*149 people think this answer is useful*

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")

## The Answer 4

*9 people think this answer is useful*

`plt.autoscale()`

worked for me.

## The Answer 5

*7 people think this answer is useful*

Putting `plot.tight_layout()`

after all changes on the graph, just before `show()`

or `savefig()`

will solve the problem.

## The Answer 6

*5 people think this answer is useful*

You can also set custom padding as defaults in your `$HOME/.matplotlib/matplotlib_rc`

as follows. In the example below I have modified both the bottom and left out-of-the-box padding:

# The figure subplot parameters. All dimensions are a fraction of the
# figure width or height
figure.subplot.left : 0.1 #left side of the subplots of the figure
#figure.subplot.right : 0.9
figure.subplot.bottom : 0.15
...

## The Answer 7

*0 people think this answer is useful*

for some reason sharex was set to True so I turned it back to False and it worked fine.

df.plot(........,sharex=False)