Title: FIX: macosx animations by greglucas · Pull Request #21768 · matplotlib/matplotlib · GitHub
Open Graph Title: FIX: macosx animations by greglucas · Pull Request #21768 · matplotlib/matplotlib
X Title: FIX: macosx animations by greglucas · Pull Request #21768 · matplotlib/matplotlib
Description: The macosx backend would not update on flush_events calls due to the loop being run too fast for the view to update properly in the NSApp. Fix that by adding an unnoticeable RunLoop timer slowdown that allows the app to see the changes. Putting an NSLog into the drawRect loop before and after this produced identical results, taking 0.021 seconds per iteration, but with this addition, the draw update actually happens. It doesn't feel super ideal, but this method is apparently used by others... link to google book Example from #17642 import matplotlib.pyplot as plt import numpy as np x = np.linspace(0, 2 * np.pi, 100) fig, ax = plt.subplots() # animated=True tells matplotlib to only draw the artist when we # explicitly request it (ln,) = ax.plot(x, np.sin(x), animated=True) # make sure the window is raised, but the script keeps going plt.show(block=False) # stop to admire our empty window axes and ensure it is rendered at # least once. # # We need to fully draw the figure at its final size on the screen # before we continue on so that : # a) we have the correctly sized and drawn background to grab # b) we have a cached renderer so that ``ax.draw_artist`` works # so we spin the event loop to let the backend process any pending operations plt.pause(0.1) # get copy of entire figure (everything inside fig.bbox) sans animated artist bg = fig.canvas.copy_from_bbox(fig.bbox) # draw the animated artist, this uses a cached renderer ax.draw_artist(ln) # show the result to the screen, this pushes the updated RGBA buffer from the # renderer to the GUI framework so you can see it fig.canvas.blit(fig.bbox) for j in range(100): # reset the background back in the canvas state, screen unchanged fig.canvas.restore_region(bg) # update the artist, neither the canvas state nor the screen have changed ln.set_ydata(np.sin(x + (j / 100) * np.pi)) # re-render the artist, updating the canvas state, but not the screen ax.draw_artist(ln) # copy the image to the GUI state, but screen might not changed yet fig.canvas.blit(fig.bbox) # flush any pending GUI events, re-painting the screen if needed fig.canvas.flush_events() # you can put a pause in if you want to slow things down # plt.pause(.1) Closes #17642 PR Summary PR Checklist Tests and Styling Has pytest style unit tests (and pytest passes). Is Flake 8 compliant (install flake8-docstrings and run flake8 --docstring-convention=all). Documentation New features are documented, with examples if plot related. New features have an entry in doc/users/next_whats_new/ (follow instructions in README.rst there). API changes documented in doc/api/next_api_changes/ (follow instructions in README.rst there). Documentation is sphinx and numpydoc compliant (the docs should build without error).
Open Graph Description: The macosx backend would not update on flush_events calls due to the loop being run too fast for the view to update properly in the NSApp. Fix that by adding an unnoticeable RunLoop timer slowdown ...
X Description: The macosx backend would not update on flush_events calls due to the loop being run too fast for the view to update properly in the NSApp. Fix that by adding an unnoticeable RunLoop timer slowdown ...
Opengraph URL: https://github.com/matplotlib/matplotlib/pull/21768
X: @github
Domain: github.com
| route-pattern | /:user_id/:repository/pull/:id/files(.:format) |
| route-controller | pull_requests |
| route-action | files |
| fetch-nonce | v2:e44af8a1-2408-34b5-8d2f-8ce762cfb805 |
| current-catalog-service-hash | ae870bc5e265a340912cde392f23dad3671a0a881730ffdadd82f2f57d81641b |
| request-id | 9FC6:1874B4:412622:577887:6A51929E |
| html-safe-nonce | 5e1a8dca3e46bf46441101a1d9a6beec679045e61af98b2592d7abaf3528f585 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI5RkM2OjE4NzRCNDo0MTI2MjI6NTc3ODg3OjZBNTE5MjlFIiwidmlzaXRvcl9pZCI6Ijg3MDU0NzM3OTI0ODEyNjgzODIiLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ== |
| visitor-hmac | 5756da73c43d0a775c5cc09f739997044a1cbc044d4e8c46e2815ee82eb55843 |
| hovercard-subject-tag | pull_request:789873309 |
| github-keyboard-shortcuts | repository,pull-request-list,pull-request-conversation,pull-request-files-changed,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/matplotlib/matplotlib/pull/21768/files |
| twitter:image | https://avatars.githubusercontent.com/u/12417828?s=400&v=4 |
| twitter:card | summary_large_image |
| og:image | https://avatars.githubusercontent.com/u/12417828?s=400&v=4 |
| og:image:alt | The macosx backend would not update on flush_events calls due to the loop being run too fast for the view to update properly in the NSApp. Fix that by adding an unnoticeable RunLoop timer slowdown ... |
| og:site_name | GitHub |
| og:type | object |
| hostname | github.com |
| expected-hostname | github.com |
| None | b9a586c06a05a7a86fc7e3f4dbd03e42f6869085879aa184aa6369456dbd50fb |
| turbo-cache-control | no-preview |
| diff-view | unified |
| go-import | github.com/matplotlib/matplotlib git https://github.com/matplotlib/matplotlib.git |
| octolytics-dimension-user_id | 215947 |
| octolytics-dimension-user_login | matplotlib |
| octolytics-dimension-repository_id | 1385122 |
| octolytics-dimension-repository_nwo | matplotlib/matplotlib |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 1385122 |
| octolytics-dimension-repository_network_root_nwo | matplotlib/matplotlib |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | true |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 7aed05249554b889eb33d002851a973eebcc7e91 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width