Answer a question

Say I create a plot:

import matplotlib.pyplot as plt
plt.clf()
import numpy as np
props = np.random.randint(0,100,(200,))
x=np.arange(1,201,1)
plt.plot(x,props,c='k')
plt.xlabel('blah blah blah blah blah blah\n blah blah blah blah blah')
plt.ylabel('blah blah blah blah blah blah blah blah blah')
fig=plt.gcf()
fig.set_size_inches(3.75,3.75)#14, 23)
plt.savefig('testfig.png',dpi=300)

When using Ipython (via Spyder), the plot presents ok. However when I looked at the saved image, it presents thus:

enter image description here

As you can see, the text is cut off. What is recommended practice for dealing with this?

I have got round it by increasing the figure size, and re-sizing afterwards. However, my aim is to produce a set of images with a consistent text size (figure size varies); so this approach is not ideal.

Note. Whilst a similar question exists, this question is distinct in that it:

  • deals with both xlabel and ylabel.
  • combines with set_size_inchesfunction
  • seeks to ensure consistent text size with differing figure sizes.
  • seeks to find out why Ipython output differs from savefig

Answers

The Ipython console in Spyder uses the inline backend, which saves the figure as png and displays the output image. When saving, it uses the option bbox_inches = "tight".

So in order to obtain the same figure as shown in the console, you may decide to use this option as well - it basically extends or shrinks the bounding box such that all objects in the canvas are displayed.

plt.savefig('testfig.png',dpi=300, bbox_inches = "tight")

Alternatively, you can make sure that all objects are already inside the figure boundaries before saving or showing the figure. This can either be accomplished using

plt.tight_layout()

which tries to do that automatically, or you can use

plt.subplots_adjust(left=0.3, right=0.9, bottom=0.3, top=0.9)

where the parameters denote the margins on each side in units of fractions of figure size (30% space on the left, 10% space on the right, etc.).

Logo

Python社区为您提供最前沿的新闻资讯和知识内容

更多推荐