Title: WxAgg backend draws the wrong size when wxpython app is high DPI aware on Windows · Issue #18940 · matplotlib/matplotlib · GitHub
Open Graph Title: WxAgg backend draws the wrong size when wxpython app is high DPI aware on Windows · Issue #18940 · matplotlib/matplotlib
X Title: WxAgg backend draws the wrong size when wxpython app is high DPI aware on Windows · Issue #18940 · matplotlib/matplotlib
Description: Bug report In wxpython 4.1.0 initial support was added for high DPI awareness on Windows. Using matplotlib with the wxAgg backend and wxpython 4.1.0 on Windows results in everything being drawn at the wrong size. This is shown below, whe...
Open Graph Description: Bug report In wxpython 4.1.0 initial support was added for high DPI awareness on Windows. Using matplotlib with the wxAgg backend and wxpython 4.1.0 on Windows results in everything being drawn at ...
X Description: Bug report In wxpython 4.1.0 initial support was added for high DPI awareness on Windows. Using matplotlib with the wxAgg backend and wxpython 4.1.0 on Windows results in everything being drawn at ...
Opengraph URL: https://github.com/matplotlib/matplotlib/issues/18940
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"WxAgg backend draws the wrong size when wxpython app is high DPI aware on Windows","articleBody":"### Bug report\r\n\r\nIn wxpython 4.1.0 initial support was added for high DPI awareness on Windows. Using matplotlib with the wxAgg backend and wxpython 4.1.0 on Windows results in everything being drawn at the wrong size. This is shown below, where the same plot is made without (left) and with (right) high DPI awareness turned on. For reference, I'm doing this on a 5120x2880 display with scale factor set to 200%.\r\n\r\nLeft, without high DPI awareness, right with high DPI awareness:\r\n\r\n\r\n**Code for reproduction**\r\n\r\n```python\r\nimport ctypes\r\n\r\nimport wx\r\nimport matplotlib as mpl\r\nfrom matplotlib.backends.backend_wxagg import NavigationToolbar2WxAgg\r\nfrom matplotlib.backends.backend_wxagg import FigureCanvasWxAgg\r\n\r\nclass PlotFrame(wx.Frame):\r\n def __init__(self, parent, title, *args, **kwargs):\r\n wx.Frame.__init__(self, parent, title=title, *args, **kwargs)\r\n\r\n self.fig = mpl.figure.Figure((5,4))\r\n self.subplot1 = self.fig.add_subplot(111)\r\n self.canvas = FigureCanvasWxAgg(self, wx.ID_ANY, self.fig)\r\n\r\n self.toolbar = NavigationToolbar2WxAgg(self.canvas)\r\n self.toolbar.Realize()\r\n\r\n sizer = wx.BoxSizer(wx.VERTICAL)\r\n sizer.Add(self.canvas, 1, wx.LEFT | wx.TOP | wx.GROW)\r\n sizer.Add(self.toolbar, 0, wx.GROW)\r\n\r\n self.subplot1.plot([0, 1, 2, 3, 4], [0, 2, 4, 9, 16], '-o')\r\n\r\n self.SetSizer(sizer)\r\n self.Layout()\r\n self.Fit()\r\n self.CenterOnScreen()\r\n self.Show(True)\r\n\r\nif __name__ == '__main__':\r\n # Windows high DPI support\r\n try:\r\n ctypes.windll.shcore.SetProcessDpiAwareness(True)\r\n except:\r\n pass\r\n\r\n app = wx.App(False)\r\n frame = PlotFrame(None, 'My Plot Frame')\r\n app.MainLoop()\r\n```\r\n\r\nAlternatively, using pyplot the issue is also reproduced:\r\n```python\r\nimport ctypes\r\n\r\nimport matplotlib as mpl\r\nimport matplotlib.pyplot as plt\r\n\r\n# Windows high DPI support\r\ntry:\r\n ctypes.windll.shcore.SetProcessDpiAwareness(True)\r\nexcept:\r\n pass\r\n\r\nmpl.use('wxAgg')\r\n\r\nplt.plot(range(10), range(10)[::-1])\r\nplt.show()\r\n```\r\n\r\n**Actual and expected outcomes**\r\nActual outcome is a window that is half size, with all fonts, line thicknesses, icons, etc at half size (presumably because it's not accounting for the 200% scale factor). The expected outcome is something identical to the plot with high DPI awareness turned off, except sharp (i.e. natively rendering fonts, lines, etc at 2x size, instead of rendering at 1x and then Windows doing the scaling).\r\n\r\nThis is shown in the image above, reproduced here:\r\n\r\n\r\n**Matplotlib version**\r\n * Operating system: Windows 10\r\n * Matplotlib version: Latest from git, displays as 3.3.2+1628.gfa547835c\r\n * Matplotlib backend (`print(matplotlib.get_backend())`): WxAgg\r\n * Python version: 3.8.2\r\n * Other libraries: Wxpython 4.1.0\r\n * Additional info: Tested on a 5120x2880 display with scale factor set to 200%.\r\n\r\nPython installed through conda, matplotlib installed from source, wxpython 4.1.0 installed via pip (4.1.0 not available on conda yet).","author":{"url":"https://github.com/jbhopkins","@type":"Person","name":"jbhopkins"},"datePublished":"2020-11-12T16:04:11.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":5},"url":"https://github.com/18940/matplotlib/issues/18940"}
| 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:6b471ad9-a34c-6046-aa03-d66ed9a8831a |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | CB02:1B675D:FD170C:15586DB:6A533512 |
| html-safe-nonce | 2450b86615fedda5490526952201a5d001e67233534205f7fb2b5c5afef312b3 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJDQjAyOjFCNjc1RDpGRDE3MEM6MTU1ODZEQjo2QTUzMzUxMiIsInZpc2l0b3JfaWQiOiI5MDQ3MjcwODMzMjQ1MDc0NzA2IiwicmVnaW9uX2VkZ2UiOiJpYWQiLCJyZWdpb25fcmVuZGVyIjoiaWFkIn0= |
| visitor-hmac | 08d5206f76a1a405e470d830884e94205dcfefff75f9a3e6ff65b6dcf16b107c |
| hovercard-subject-tag | issue:741723776 |
| 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/18940/issue_layout |
| twitter:image | https://opengraph.githubassets.com/005e8c52240e73207297360a0f419cd762d701c432fb346ef196db19e3022f45/matplotlib/matplotlib/issues/18940 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/005e8c52240e73207297360a0f419cd762d701c432fb346ef196db19e3022f45/matplotlib/matplotlib/issues/18940 |
| og:image:alt | Bug report In wxpython 4.1.0 initial support was added for high DPI awareness on Windows. Using matplotlib with the wxAgg backend and wxpython 4.1.0 on Windows results in everything being drawn at ... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | jbhopkins |
| 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