Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

BUG Ignore invisible axes in computing tight_layout#8244

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Merged
NelleV merged 4 commits intomatplotlib:masterfromResidentMario:8225
Mar 12, 2017

Conversation

ResidentMario
Copy link
Contributor

cf.#8225

Should pass tests. But, we'll see. Maybe this has side-effects.

@tacaswelltacaswell added this to the2.0.1 (next bug fix release) milestoneMar 8, 2017
@tomspur
Copy link
Contributor

This only fails pep8:
[gw1] linux -- Python 3.6.0 /home/travis/build/matplotlib/matplotlib/venv/bin/python /home/travis/build/matplotlib/matplotlib/lib/matplotlib/tight_layout.py:126:80: E501 line too long (99 > 79 characters) tight_bbox_raw = union([ax.get_tightbbox(renderer) for ax in subplots if ax.get_visible()])

@ResidentMario
Copy link
ContributorAuthor

Gotcha.@tomspur Presumably I should add a test somewhere too, right?

These CIs are taking five-ever...

@tomspur
Copy link
Contributor

Yes, a test/picture helps to understand this issue and stops from breaking it again :)

@@ -157,6 +158,15 @@ def test_tight_layout8():
example_plot(ax, fontsize=24)


@image_comparison(baseline_images=['tight_layout9'])
def test_tight_layout9():
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

How is this passing? The baseline images have not been added...

Copy link
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

Bear with me here, I have no idea howmatplotlib handles its tests. 😅 Was planning on getting back to this in a later commit, but you've caught me red-handed.

@@ -123,6 +123,9 @@ def auto_adjust_subplotpars(fig, renderer,
for subplots, ax_bbox, (num1, num2) in zip(subplot_list,
ax_bbox_list,
num1num2_list):
if all([not ax.get_visible() for ax in subplots]):
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

shouldn't this just be filtering out invisible axes?subplots = [ax for ox in subplots if ax.get_visible()]

Would it make more sense to make sure what evercalls method does that filtering?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

yeah, I don't understand why you changed what I originally suggested. I suggested putting a filter in the list comprehension down below. Now, it does make sense to skip this iteration ifall the axes in this group are invisible. So, I would put the filter in the list comprehension down below, and also change this one from aany to anall.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

grrr, I fail reading comprehension... you do have aall. But the filter should still be down below.

Copy link
ContributorAuthor

@ResidentMarioResidentMarioMar 10, 2017
edited
Loading

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

The first commit tried that approach (seehere).

But it actually failed to fix the issue. If you try to use that code with the original minimal failing example:

importmatplotlib.pyplotaspltf,axarr=plt.subplots(2,2)axarr[1][1].set_visible(False)plt.tight_layout()

Theunion op will fail because the list comprehension will pass it an empty list ([]).

Copy link
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

Before making a PR, please check that your commit actually fixes the issue...ahem. 😅

Skipping the laying calculations altogether (the approach here) meanwhile seems to work.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

Yes, that's why you need both approaches. if a subset of the subplots are not visible, then the way the code is currently, the invisible axes still haveget_tightbbox called on them, which would also fail. You need to protect that (my original approach),and protect from aunion() call on an empty list (your current approach).

ResidentMario reacted with thumbs up emoji
Copy link
ContributorAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

OK, I understand you now—I've re-added the conditional check.

@tacaswell
Copy link
Member

attn@NelleV@anntzer@Kojoley Something is going wrong with pytest here. Running this locally I get:

15:47 $ python -m pytest -vv lib/matplotlib/tests/test_tightlayout.py ========================================================================================================================================================================================================= test session starts ==========================================================================================================================================================================================================platform linux -- Python 3.6.0, pytest-3.0.6, py-1.4.32, pluggy-0.4.0 -- /tmp/mpl_stock/bin/pythoncachedir: .cacherootdir: /home/tcaswell/source/p/matplotlib, inifile: pytest.inicollected 36 items lib/matplotlib/tests/test_tightlayout.py::test_tight_layout1[0-tight_layout1-png] <- /home/tcaswell/source/p/matplotlib/lib/matplotlib/tests/test_tightlayout.py PASSEDlib/matplotlib/tests/test_tightlayout.py::test_tight_layout1[0-tight_layout1-pdf] <- /home/tcaswell/source/p/matplotlib/lib/matplotlib/tests/test_tightlayout.py PASSEDlib/matplotlib/tests/test_tightlayout.py::test_tight_layout1[0-tight_layout1-svg] <- /home/tcaswell/source/p/matplotlib/lib/matplotlib/tests/test_tightlayout.py PASSEDlib/matplotlib/tests/test_tightlayout.py::test_tight_layout2[0-tight_layout2-png] <- /home/tcaswell/source/p/matplotlib/lib/matplotlib/tests/test_tightlayout.py PASSEDlib/matplotlib/tests/test_tightlayout.py::test_tight_layout2[0-tight_layout2-pdf] <- /home/tcaswell/source/p/matplotlib/lib/matplotlib/tests/test_tightlayout.py PASSEDlib/matplotlib/tests/test_tightlayout.py::test_tight_layout2[0-tight_layout2-svg] <- /home/tcaswell/source/p/matplotlib/lib/matplotlib/tests/test_tightlayout.py PASSEDlib/matplotlib/tests/test_tightlayout.py::test_tight_layout3[0-tight_layout3-png] <- /home/tcaswell/source/p/matplotlib/lib/matplotlib/tests/test_tightlayout.py PASSEDlib/matplotlib/tests/test_tightlayout.py::test_tight_layout3[0-tight_layout3-pdf] <- /home/tcaswell/source/p/matplotlib/lib/matplotlib/tests/test_tightlayout.py PASSEDlib/matplotlib/tests/test_tightlayout.py::test_tight_layout3[0-tight_layout3-svg] <- /home/tcaswell/source/p/matplotlib/lib/matplotlib/tests/test_tightlayout.py PASSEDlib/matplotlib/tests/test_tightlayout.py::test_tight_layout4[0-tight_layout4-png] <- /home/tcaswell/source/p/matplotlib/lib/matplotlib/tests/test_tightlayout.py XPASSlib/matplotlib/tests/test_tightlayout.py::test_tight_layout4[0-tight_layout4-pdf] <- /home/tcaswell/source/p/matplotlib/lib/matplotlib/tests/test_tightlayout.py XPASSlib/matplotlib/tests/test_tightlayout.py::test_tight_layout4[0-tight_layout4-svg] <- /home/tcaswell/source/p/matplotlib/lib/matplotlib/tests/test_tightlayout.py XPASSlib/matplotlib/tests/test_tightlayout.py::test_tight_layout5[0-tight_layout5-png] <- /home/tcaswell/source/p/matplotlib/lib/matplotlib/tests/test_tightlayout.py PASSEDlib/matplotlib/tests/test_tightlayout.py::test_tight_layout5[0-tight_layout5-pdf] <- /home/tcaswell/source/p/matplotlib/lib/matplotlib/tests/test_tightlayout.py PASSEDlib/matplotlib/tests/test_tightlayout.py::test_tight_layout5[0-tight_layout5-svg] <- /home/tcaswell/source/p/matplotlib/lib/matplotlib/tests/test_tightlayout.py PASSEDlib/matplotlib/tests/test_tightlayout.py::test_tight_layout6[0-tight_layout6-png] <- /home/tcaswell/source/p/matplotlib/lib/matplotlib/tests/test_tightlayout.py PASSEDlib/matplotlib/tests/test_tightlayout.py::test_tight_layout6[0-tight_layout6-pdf] <- /home/tcaswell/source/p/matplotlib/lib/matplotlib/tests/test_tightlayout.py PASSEDlib/matplotlib/tests/test_tightlayout.py::test_tight_layout6[0-tight_layout6-svg] <- /home/tcaswell/source/p/matplotlib/lib/matplotlib/tests/test_tightlayout.py PASSEDlib/matplotlib/tests/test_tightlayout.py::test_tight_layout7[0-tight_layout7-png] <- /home/tcaswell/source/p/matplotlib/lib/matplotlib/tests/test_tightlayout.py PASSEDlib/matplotlib/tests/test_tightlayout.py::test_tight_layout7[0-tight_layout7-pdf] <- /home/tcaswell/source/p/matplotlib/lib/matplotlib/tests/test_tightlayout.py PASSEDlib/matplotlib/tests/test_tightlayout.py::test_tight_layout7[0-tight_layout7-svg] <- /home/tcaswell/source/p/matplotlib/lib/matplotlib/tests/test_tightlayout.py PASSEDlib/matplotlib/tests/test_tightlayout.py::test_tight_layout8[0-tight_layout8-png] <- /home/tcaswell/source/p/matplotlib/lib/matplotlib/tests/test_tightlayout.py PASSEDlib/matplotlib/tests/test_tightlayout.py::test_tight_layout8[0-tight_layout8-pdf] <- /home/tcaswell/source/p/matplotlib/lib/matplotlib/tests/test_tightlayout.py PASSEDlib/matplotlib/tests/test_tightlayout.py::test_tight_layout8[0-tight_layout8-svg] <- /home/tcaswell/source/p/matplotlib/lib/matplotlib/tests/test_tightlayout.py PASSEDlib/matplotlib/tests/test_tightlayout.py::test_tight_layout9[0-tight_layout9-png] <- /home/tcaswell/source/p/matplotlib/lib/matplotlib/tests/test_tightlayout.py xfaillib/matplotlib/tests/test_tightlayout.py::test_tight_layout9[0-tight_layout9-pdf] <- /home/tcaswell/source/p/matplotlib/lib/matplotlib/tests/test_tightlayout.py xfaillib/matplotlib/tests/test_tightlayout.py::test_tight_layout9[0-tight_layout9-svg] <- /home/tcaswell/source/p/matplotlib/lib/matplotlib/tests/test_tightlayout.py xfaillib/matplotlib/tests/test_tightlayout.py::test_outward_ticks[0-outward_ticks-png] <- /home/tcaswell/source/p/matplotlib/lib/matplotlib/tests/test_tightlayout.py PASSEDlib/matplotlib/tests/test_tightlayout.py::test_outward_ticks[0-outward_ticks-pdf] <- /home/tcaswell/source/p/matplotlib/lib/matplotlib/tests/test_tightlayout.py PASSEDlib/matplotlib/tests/test_tightlayout.py::test_outward_ticks[0-outward_ticks-svg] <- /home/tcaswell/source/p/matplotlib/lib/matplotlib/tests/test_tightlayout.py PASSEDlib/matplotlib/tests/test_tightlayout.py::test_tight_layout_offsetboxes[0-tight_layout_offsetboxes1-png] <- /home/tcaswell/source/p/matplotlib/lib/matplotlib/tests/test_tightlayout.py PASSEDlib/matplotlib/tests/test_tightlayout.py::test_tight_layout_offsetboxes[0-tight_layout_offsetboxes1-pdf] <- /home/tcaswell/source/p/matplotlib/lib/matplotlib/tests/test_tightlayout.py PASSEDlib/matplotlib/tests/test_tightlayout.py::test_tight_layout_offsetboxes[0-tight_layout_offsetboxes1-svg] <- /home/tcaswell/source/p/matplotlib/lib/matplotlib/tests/test_tightlayout.py PASSEDlib/matplotlib/tests/test_tightlayout.py::test_tight_layout_offsetboxes[1-tight_layout_offsetboxes2-png] <- /home/tcaswell/source/p/matplotlib/lib/matplotlib/tests/test_tightlayout.py PASSEDlib/matplotlib/tests/test_tightlayout.py::test_tight_layout_offsetboxes[1-tight_layout_offsetboxes2-pdf] <- /home/tcaswell/source/p/matplotlib/lib/matplotlib/tests/test_tightlayout.py PASSEDlib/matplotlib/tests/test_tightlayout.py::test_tight_layout_offsetboxes[1-tight_layout_offsetboxes2-svg] <- /home/tcaswell/source/p/matplotlib/lib/matplotlib/tests/test_tightlayout.py PASSED=========================================================================================================================================================================================== 30 passed, 3 xfailed, 3 xpassed in 10.63 seconds ===========================================================================================================================================================================================

I would expect the three xfail to be real fails (due to missing files).

@anntzer
Copy link
Contributor

This is the culprit (decorators.py, copy_baseline):

        if os.path.exists(orig_expected_fname):            shutil.copyfile(orig_expected_fname, expected_fname)        else:            reason = ("Do not have baseline image {0} because this "                      "file does not exist: {1}".format(expected_fname,                                                        orig_expected_fname))            if is_called_from_pytest():                import pytest                pytest.xfail(reason)            else:                from ._nose import knownfail                knownfail(reason)        return expected_fname

I would just remove that chunk and replace by a real fail in the actual test function.

@tacaswell
Copy link
Member

See#8262 for a fix to my previous comment, sorry to have hi-jacked this PR with other issues.

@ResidentMario
Copy link
ContributorAuthor

Always happy to be breaking things productively. 👍

@ResidentMario
Copy link
ContributorAuthor

This passes tests locally, except for an unrelated error intight_layout8. A different unrelated failure appears to occur ontravis (which reset and is now running again for some reason?).

@NelleV
Copy link
Member

We have some flaky test, so we sometimes restart some tests by hand (hence travis rerunning magically :) )

@ResidentMario
Copy link
ContributorAuthor

All green. LGTM?

Copy link
Member

@tacaswelltacaswell left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

Only concern would be if we really need the image comparison tests here. The bug it is fixing is 'do raise'.

@NelleVNelleV merged commit27f6781 intomatplotlib:masterMar 12, 2017
@NelleV
Copy link
Member

Thanks@ResidentMario !

ResidentMario reacted with thumbs up emoji

@@ -157,6 +158,15 @@ def test_tight_layout8():
example_plot(ax, fontsize=24)


@image_comparison(baseline_images=['tight_layout9'])
def test_tight_layout9():
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

There are now two test functions in one file with the same name. So the first one gets clobbered by the second one.

Copy link
Member

@WeatherGodWeatherGodMar 16, 2017
edited
Loading

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

Sorry, please ignore. I misreadtest_tight_layout8 astest_tight_layout9. Really need to fix the default fonts on this computer...

QuLogic pushed a commit to QuLogic/matplotlib that referenced this pull requestMar 27, 2017
BUG Ignore invisible axes in computing tight_layout
@QuLogic
Copy link
Member

Backported tov2.0.x as3ff1153.

Sign up for freeto join this conversation on GitHub. Already have an account?Sign in to comment
Reviewers

@WeatherGodWeatherGodWeatherGod left review comments

@tacaswelltacaswelltacaswell approved these changes

Assignees
No one assigned
Labels
None yet
Projects
None yet
Milestone
v2.0.1
Development

Successfully merging this pull request may close these issues.

7 participants
@ResidentMario@tomspur@tacaswell@anntzer@NelleV@QuLogic@WeatherGod

[8]ページ先頭

©2009-2025 Movatter.jp