Skip to content

bbox_inches='tight' clips figure.suptitle #688

Closed
fperez opened this Issue Jan 29, 2012 · 3 comments

5 participants

@fperez
Matplotlib Developers member
fperez commented Jan 29, 2012

In ipython for the qtconsole and notebook, we send inline figures using

fig.canvas.print_figure(bytes_io, format=fmt, bbox_inches='tight')

as seen here.

However, this produces truncated figure titles. Consider this code:

f, ax = plt.subplots()
ax.plot(rand(100))
ax.set_title('Axis title')
f.suptitle('Figure title');

which produces this in the notebook:

A slightly more complicated example, using basemap, not only truncates the title but also all the x and y labels. We show it here for reference, but as @jswhit (basemap author) pointed out over email, basemap labels are located at arbitrary positions and so it's harder for matplotlib to take them into consideration.

from mpl_toolkits.basemap import Basemap

lon0, lat0, lon1, lat1 = (84.38, 26.22, 88.9, 29.8)
resolution = 'i'

parallels = np.linspace(lat0, lat1, 5)
meridians = np.linspace(lon0, lon1, 5)

f, ax = plt.subplots()
m = Basemap(lon0, lat0, lon1, lat1, resolution=resolution, ax=ax)
m.drawcountries(color=(1,1,0))  # country boundaries in pure yellow
m.drawrivers(color=(0,1,1))  # rivers in cyan
m.bluemarble()  # NASA bluemarble image
m.drawmeridians(meridians, labels=[0,0,0,1], fmt='%.2f')
m.drawparallels(parallels, labels=[1,0,0,0], fmt='%.2f')
f.suptitle('The Himalayas');

While we noticed this in the notebook, the problem will be present for any figure saving operation that supports bbox_inches='tight'.

As discussed in the mailing list thread about this problem, mpl should probably use the position of 'official' artists such figure suptitles in the computation of the bounding box.

@illya23b

I noticed another case of clipping with bbox_inches='tight'. I have some code in which I create a legend outside of its associated axes using the bbox_to_anchor keyword argument; in IPython, this legend gets clipped out. Example:
Clipping example
Not sure if the submitted patch fixes this issue, too….

@leejjoon
Matplotlib Developers member

The legend issue should be fixed with 565efe4.

@jdh2358 jdh2358 closed this Mar 10, 2012
@pelson pelson was assigned Nov 2, 2012
@pelson
Matplotlib Developers member
pelson commented Nov 3, 2012

I'm not sure if this issue was closed prematurely or not, but I expect all of the above cases to work as a result of #1448.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.