Say I want to plot a very simple figure with 2-subplot laid out horizontally, and I want to add some text on the right of the second subplot. I am working in Jupyter Notebook, but this shouldn't change anything:
import matplotlib.pyplot as plt
%matplotlib inline
plt.figure(figsize=(8, 3))
ax1 = plt.subplot(121)
ax1.plot(x,y1)
ax2 = plt.subplot(122)
ax2.plot(x,y2)
ax2.text(1.05,0.7, 'Some text here', horizontalalignment='left', transform=ax2.transAxes)
The displayed output is just as I want it:
However, when I try to export the figure, the text to the right get cut:
plt.savefig(r'C:\mypy\test_graph.png', ext='png');
Using plt.tightlayout()
, as suggested here makes the problem worse.
How can I best resolve this?
Jupyter notebook is by default configured to use its "inline" backend (%matplotlib inline
). It displays a saved png version of the figure. During this saving, the option bbox_inches="tight"
is used.
In order to replicate the figure that you see in the jupyter output, you would need to use this option as well.
plt.savefig("output.png", bbox_inches="tight")
What this command does is to extend or shrink the area of the saved figure to include all the artists in it.
Alternatively, you can shrink the content of the figure, such that there is enough space for the text to fit into the original figure.
This can be done with e.g.
plt.subplots_adjust(right=0.7)
which would mean that the rightmost axes stops at 70% of the figure width.
Adding bbox_inches="tight"
to the savefig **kwargs will do it:
plt.savefig(r'C:\mypy\test_graph.png', ext='png', bbox_inches="tight")
Saved file:
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With