Title: FigureCanvasAgg.renderer and FigureCanvasAgg.get_renderer have subtly different semantics · Issue #13099 · matplotlib/matplotlib · GitHub
Open Graph Title: FigureCanvasAgg.renderer and FigureCanvasAgg.get_renderer have subtly different semantics · Issue #13099 · matplotlib/matplotlib
X Title: FigureCanvasAgg.renderer and FigureCanvasAgg.get_renderer have subtly different semantics · Issue #13099 · matplotlib/matplotlib
Description: FigureCanvasAgg.get_renderer is defined as def get_renderer(self, cleared=False): l, b, w, h = self.figure.bbox.bounds key = w, h, self.figure.dpi reuse_renderer = (hasattr(self, "renderer") and getattr(self, "_lastKey", None) == key) if...
Open Graph Description: FigureCanvasAgg.get_renderer is defined as def get_renderer(self, cleared=False): l, b, w, h = self.figure.bbox.bounds key = w, h, self.figure.dpi reuse_renderer = (hasattr(self, "renderer") and ge...
X Description: FigureCanvasAgg.get_renderer is defined as def get_renderer(self, cleared=False): l, b, w, h = self.figure.bbox.bounds key = w, h, self.figure.dpi reuse_renderer = (hasattr(self, "renderer&quo...
Opengraph URL: https://github.com/matplotlib/matplotlib/issues/13099
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"FigureCanvasAgg.renderer and FigureCanvasAgg.get_renderer have subtly different semantics","articleBody":"FigureCanvasAgg.get_renderer is defined as\r\n```\r\n def get_renderer(self, cleared=False):\r\n l, b, w, h = self.figure.bbox.bounds\r\n key = w, h, self.figure.dpi\r\n reuse_renderer = (hasattr(self, \"renderer\")\r\n and getattr(self, \"_lastKey\", None) == key)\r\n if not reuse_renderer:\r\n self.renderer = RendererAgg(w, h, self.figure.dpi)\r\n self._lastKey = key\r\n elif cleared:\r\n self.renderer.clear()\r\n return self.renderer\r\n```\r\ni.e. (ignoring the cleared kwarg) if the figure bbox or dpi has changed, generate a new renderer.\r\nAlthough this won't matter in most cases, it will in the figure saving routines as they manipulate the dpi, or (in GUI backends) when the figure is being resized.\r\nIn the codebase, it looks like `canvas.renderer` and `canvas.get_renderer()` are both used more or less indiscriminately and I doubt anyone took the difference between them into account.\r\nIt also makes it harder to write 3rd-party backends (cough cough) which have to provide exactly the same semantics if they want to be swappable to replace the Agg backend.\r\n\r\nGiven that a renderer whose size/dpi does not match the figure's doesn't really make sense, I think we should deprecate `get_renderer()` and make `.renderer` a property that self-replaces when the figure size/dpi changes (or vice-versa deprecate `.renderer`, but that seems worse on a backcompat code-churn PoV); or, if we really worry about performance, move the renderer-regenerating behavior to e.g. `check_renderer_invalidation()`. (The `cleared=True` behavior should also be split out to e.g. `get_clean_renderer()`).\r\n\r\nSee also #1852.","author":{"url":"https://github.com/anntzer","@type":"Person","name":"anntzer"},"datePublished":"2019-01-04T10:56:21.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":5},"url":"https://github.com/13099/matplotlib/issues/13099"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:84734cdf-d54c-04f3-569c-628ca00128cc |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | C9CE:171A20:31E6ED6:43CEC20:6A53EB76 |
| html-safe-nonce | 91e8d5027c7537778dfaaae2da0974c2f1369dafb2ad22ea8ee95cf46af7bfd5 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJDOUNFOjE3MUEyMDozMUU2RUQ2OjQzQ0VDMjA6NkE1M0VCNzYiLCJ2aXNpdG9yX2lkIjoiOTE0MTM1MjYwNzI2MDA3NjkxOCIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 |
| visitor-hmac | 9ee36e83fe400eb1f20703ca2fd4cd136837fef72e1c6704feaced24e7022f88 |
| hovercard-subject-tag | issue:395885508 |
| github-keyboard-shortcuts | repository,issues,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/_view_fragments/issues/show/matplotlib/matplotlib/13099/issue_layout |
| twitter:image | https://opengraph.githubassets.com/a6c8f9435396564b61777c9af6995f067b4d435e2453b1590cf31025a1fbc1b8/matplotlib/matplotlib/issues/13099 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/a6c8f9435396564b61777c9af6995f067b4d435e2453b1590cf31025a1fbc1b8/matplotlib/matplotlib/issues/13099 |
| og:image:alt | FigureCanvasAgg.get_renderer is defined as def get_renderer(self, cleared=False): l, b, w, h = self.figure.bbox.bounds key = w, h, self.figure.dpi reuse_renderer = (hasattr(self, "renderer") and ge... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | anntzer |
| hostname | github.com |
| expected-hostname | github.com |
| None | b9a586c06a05a7a86fc7e3f4dbd03e42f6869085879aa184aa6369456dbd50fb |
| turbo-cache-control | no-preview |
| 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 | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 07a982c1d40157c619b364352b704c3ce66bb332 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width