Skip to content

Navigation Menu

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

Appearance settings

Lazier ticks for large speedup when creating large arrays of axes. #16067

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

Draft
wants to merge 1 commit into
base: main
Choose a base branch
Loading
from

Conversation

anntzer
Copy link
Contributor

@anntzer anntzer commented Jan 1, 2020

Be more careful to not create ticks earlier than needed, as that's quite
costly.

On the following benchmark

from matplotlib import pyplot as plt
from time import perf_counter
fig = plt.figure()
for i in range(3):
    print(i)
    start = perf_counter()
    fig.subplots(10, 10)
    print(perf_counter() - start)  # creation time
    start = perf_counter()
    fig.clf()
    print(perf_counter() - start)  # clearance time

this speeds up axes creation from ~1.4s to ~0.5s and figure clearance(!)
from ~2.6s to ~0.3s.

Note that a similar idea was already implemented in c935965, which sped
up creation from ~2.6s to 0.8s and clearance from ~2.2s to ~1.8s, but
obviously the whole thing is brittle and got mostly lost at some
point...

Would be nice to track performance regressions (semi)automatically.

attn @timhoffm as you initially had this idea in #9727

(#16066 made this a bit more of a pain than expected)


edit: hmmm, looks like this just transfers the cost to draw time, will investigate more...

PR Summary

PR Checklist

  • Has Pytest style unit tests
  • Code is Flake 8 compliant
  • New features are documented, with examples if plot related
  • Documentation is sphinx and numpydoc compliant
  • Added an entry to doc/users/next_whats_new/ if major new feature (follow instructions in README.rst there)
  • Documented in doc/api/api_changes.rst if API changed in a backward-incompatible way

Be more careful to not create ticks earlier than needed, as that's quite
costly.

On the following benchmark
```
from matplotlib import pyplot as plt
from time import perf_counter
fig = plt.figure()
for i in range(3):
    print(i)
    start = perf_counter()
    fig.subplots(10, 10)
    print(perf_counter() - start)  # creation time
    start = perf_counter()
    fig.clf()
    print(perf_counter() - start)  # clearance time
```
this speeds up axes creation from ~1.4s to ~0.5s and figure clearance(!)
from ~2.6s to ~0.3s.

Note that a similar idea was already implemented in c935965, which sped
up creation from ~2.6s to 0.8s and clearance from ~2.2s to ~1.8s, but
obviously the whole thing is brittle and got mostly lost at some
point...
@github-actions
Copy link

github-actions bot commented Jul 5, 2023

Since this Pull Request has not been updated in 60 days, it has been marked "inactive." This does not mean that it will be closed, though it may be moved to a "Draft" state. This helps maintainers prioritize their reviewing efforts. You can pick the PR back up anytime - please ping us if you need a review or guidance to move the PR forward! If you do not plan on continuing the work, please let us know so that we can either find someone to take the PR over, or close it.

@github-actions github-actions bot added the status: inactive Marked by the “Stale” Github Action label Jul 5, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant
Morty Proxy This is a proxified and sanitized view of the page, visit original site.