Saving plot from ipython notebook produces a cut image

17,481

By default, matplotlib leaves very little room for x and y axis labels and tick labels, therefore you need to adjust the figure to include more padding. Fortunately this could not be easier to do. Before you call savefig, you can call call

fig.tight_layout()
plt.savefig('output.png', dpi=300)

Alternatively, you can pass bbox_inches='tight' to savefig which will also adjust the figure to include all of the x and y labels

plt.savefig('output.png', dpi=300, bbox_inches='tight')
Share:
17,481
Alberto
Author by

Alberto

Updated on June 26, 2022

Comments

  • Alberto
    Alberto almost 2 years

    I am plotting a plot with 2 ylabels using ipython notebook and the image looks good when visualized inside the notebook.

    Here is how I do it:

    import matplotlib.pyplot as plt 
    
    fig, ax1 = plt.subplots()
    plt.title('TITLE')
    plt.xlabel('X')
    
    plt.plot(x, y1, '-', color='blue', label='SNR')
    ax1.set_ylabel('y1', color='blue')
    for tl in ax1.get_yticklabels():
        tl.set_color('blue')
    
    ax2 = ax1.twinx()
    plt.plot(x, y2, '--', color='red', label='Ngal')
    ax2.set_ylabel('y2', color='red')
    for tl in ax2.get_yticklabels():
        tl.set_color('red')
    

    The problem is that when I try to save it with the command

    plt.savefig('output.png', dpi=300)
    

    since the output will be an image which is cut on the right side: basically I don't see the right ylabel if the right numbers are large.