8000 Turn autoscale into a contextmanager. by anntzer · Pull Request #5538 · matplotlib/matplotlib · GitHub
[go: up one dir, main page]

Skip to content

Turn autoscale into a contextmanager. #5538

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 our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 4 commits into from
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Documentation for the autoscale contextmanager.
  • Loading branch information
anntzer committed Nov 23, 2015
commit 90397f9c5903210e24531756b92c3ebd6cd54c19
13 changes: 13 additions & 0 deletions doc/api/api_changes.rst
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,19 @@ sources of the changes you are experiencing.
For new features that were added to matplotlib, please see
:ref:`whats-new`.

Changes in 2.1.0
================

Code changes
Copy link
Member

Choose a reason for hiding this comment

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

Can you put these is a file in api_changes/*.rst. This helps to prevent the sort of conflicts this branch has.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I'd rather close this PR and make margin a tristate as discussed above. In fact, making autoscale a contextmanager is a bit misleading given that at the exit of the contextmanager (assuming it temporarily disabled autoscaling), all the artists, including those created while the cm was active, will participate in the next autoscaling... which defeats the purpose of the cm IMO. Thoughts?

The fix for z autoscaling should go in its own PR.

Copy link
Member

Choose a reason for hiding this comment

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

@anntzer That sounds like a good plan to me.

Wish we were 3 only and could use enums 😞

Copy link
Contributor Author
@anntzer anntzer Sep 24, 2016

Choose a reason for hiding this comment

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

In this case I think the best is to use strings everywhere (IMO the problem of using, say, True, False and a third value is that it is too easy to accidentally test for the boolean value and forget about the third possibility). Say "default" (current True), "remove" (current False) and "ignore"?

attn @mdboom as the author of #5583.

------------

autoscale is now a context manager
``````````````````````````````````

Instead of returning None, ``plt.autoscale`` and ``Axes.autoscale``
now return a context manager, which allows one to restore the previous
autoscaling status upon exiting the block.

Changes in 2.0.0
================

Expand Down
12 changes: 12 additions & 0 deletions doc/users/whats_new.rst
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,18 @@ revision, see the :ref:`github-stats`.
.. contents:: Table of Contents
:depth: 3

.. _whats-new-2-1:

new in matplotlib-2.1
=====================

autoscale is now a context manager
----------------------------------

Instead of returning None, ``plt.autoscale`` and ``Axes.autoscale``
now return a context manager, which allows one to restore the previous
autoscaling status upon exiting the block.

.. _whats-new-1-5:

new in matplotlib-1.5
Expand Down
7 changes: 1 addition & 6 deletions lib/matplotlib/axes/_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -2109,13 +2109,8 @@ def autoscale(self, enable=True, axis='both', tight=None):

with axes.autoscale(enable): ...

or::

@axes.autoscale(enable)
def func(): ...

will keep the autoscale status to `enable` for the duration of the
block or function and then restore it to its original value.
block only.
"""
orig_autoscale = self._autoscaleXon, self._autoscaleYon
if enable is not None:
Expand Down
0