pythonmatplotlibsavefig

Matplotlib savefig image trim


The following sample code will produce a basic line plot with no axes and save it as an SVG file:

import matplotlib.pyplot as plt
plt.axis('off')
plt.plot([1,3,1,2,3])
plt.plot([3,1,1,2,1])
plt.savefig("out.svg", transparent = True)

How do I set the resolution / dimensions of the image? There is padding on all sides of the image beyond the line graph. How do I remove the padding so that the lines appear on the edge of the image?


Solution

  • I am continually amazed at how many ways there are to do the same thing in matplotlib.
    As such, I am sure that someone can make this code much more terse.
    At any rate, this should clearly demonstrate how to go about solving your problem.

    >>> import pylab
    >>> fig = pylab.figure()
    
    >>> pylab.axis('off')
    (0.0, 1.0, 0.0, 1.0)
    >>> pylab.plot([1,3,1,2,3])
    [<matplotlib.lines.Line2D object at 0x37d8cd0>]
    >>> pylab.plot([3,1,1,2,1])
    [<matplotlib.lines.Line2D object at 0x37d8d10>]
    
    >>> fig.get_size_inches()    # check default size (width, height)
    array([ 8.,  6.])
    >>> fig.set_size_inches(4,3) 
    >>> fig.get_dpi()            # check default dpi (in inches)
    80
    >>> fig.set_dpi(40)
    
    # using bbox_inches='tight' and pad_inches=0 
    # I managed to remove most of the padding; 
    # but a small amount still persists
    >>> fig.savefig('out.svg', transparent=True, bbox_inches='tight', pad_inches=0)
    

    Documentation for savefig().