pytest-mpl
pytest-mpl copied to clipboard
Margins removed in baseline
When I run or save a modified README code in Jupyter, I get a different image than the generated baseline.
Example code run in a Jupyter cell:
#%%file test.py
%matplotlib inline
import matplotlib.pyplot as plt
import pytest
@pytest.mark.mpl_image_compare
def test_succeeds():
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.plot([1,2,3])
fig.savefig("test")
return fig
Running test_succeeds(); in Jupyter gives resulting image and saved test.png with margins:

Next, I generate a test.py file by uncommenting the first line, commenting the second line
and then running the cell
%%file test.py
#%matplotlib inline
...
From a command prompt, in the appropriate directory I run the following to generate the baseline image:
> py.test --mpl-generate-path=baseline test.py
In the baseline folder, a comparable image called test_succeeds.png is created without margins:

Aside from the difference in sizes, I notice the baseline image uses the classic mpl style. Perhaps this is the cause for the absence in margins. I report this as an issue as it is ideal that when testing the baseline image, it should be the same image as shown and saved by Jupyter.

I tested this with Anaconda 4.2.
Do you have a matplotlibrc file in ~/.matplotlib? I wonder if you have the bbox_inches='tight' option set by default?
No, I don't have any customization in that file. I tried that latter with fig.tight_layout() as well. I got the same results.
I am unable to confirm this with that latest version of matplotlib (due to this issue while upgrading). I am interested if someone can reproduce these results with matplotlib 2.0.0.
I believe the differences are due to pytest-mpl using the classic style by default. (Matplotlib changed their default style in v2.0) To use Matplotlib's current default style in pytest-mpl, test functions should be decorated with @pytest.mark.mpl_image_compare(style="default") instead.
Most new users today would probably prefer to use Matplotlib's current default style, so maybe we should consider only setting the style if it's explicitly passed to the pytest-mpl decorator? (This is assuming the default style remains stable between major releases of Matplotlib.) This could be a breaking change in pytest-mpl v1.0.0.
Jupyter by default uses bbox_inches='tight' with the matplotlib inline support.