Title: PGF Backend: Support interpolation='none'? · Issue #6740 · matplotlib/matplotlib · GitHub
Open Graph Title: PGF Backend: Support interpolation='none'? · Issue #6740 · matplotlib/matplotlib
X Title: PGF Backend: Support interpolation='none'? · Issue #6740 · matplotlib/matplotlib
Description: I'm currently trying to figure out the best way to unify the figures for my thesis, and intend to use the PGF backend to directly \include figures in my LaTeX document. When creating PGF figures that include raster graphics (e.g., via im...
Open Graph Description: I'm currently trying to figure out the best way to unify the figures for my thesis, and intend to use the PGF backend to directly \include figures in my LaTeX document. When creating PGF figures th...
X Description: I'm currently trying to figure out the best way to unify the figures for my thesis, and intend to use the PGF backend to directly \include figures in my LaTeX document. When creating PGF figure...
Opengraph URL: https://github.com/matplotlib/matplotlib/issues/6740
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"PGF Backend: Support interpolation='none'?","articleBody":"I'm currently trying to figure out the best way to unify the figures for my thesis, and intend to use the PGF backend to directly `\\include` figures in my LaTeX document.\n\nWhen creating PGF figures that include raster graphics (e.g., via `imshow`), the graphic gets stored as a PNG file and imported via `\\pgfimage`, which is great. Unfortunately, it doesn't support `interpolation='none'` as the PDF backend does:\n\n``` python\nimport numpy as np\nimport matplotlib as mpl\nimport matplotlib.pyplot as plt\n\nnp.random.seed(42)\ndata = np.random.randn(5,6)\nplt.imshow(data, cmap='hot', interpolation='none')\n\nplt.savefig('test.pdf')\n\nmpl.rcParams['pgf.texsystem'] = 'pdflatex'\nplt.savefig('test.pgf')\n```\n\nChecking the created PDF file in Evince, it indeed includes a PNG graphic of 5x6 pixels. The graphic for the PGF file is blown up, though:\n\n```\n$ file test-img0.png \ntest-img0.png: PNG image data, 577 x 481, 8-bit/color RGBA, non-interlaced\n```\n\nI can manually fix this by replacing it with a 5x6 PNG file and tweaking the PGF output as follows:\n\n``` diff\n59c59\n\u003c \\pgftext[at=\\pgfqpoint{1.220000in}{0.600000in},left,bottom]{\\pgfimage[interpolate=true,width=5.770000in,height=4.810000in]{test-img0.png}}%\n\n---\n\u003e \\pgftext[at=\\pgfqpoint{1.220000in}{0.600000in},left,bottom]{\\pgfimage[interpolate=false,width=5.770000in,height=4.810000in]{test-img0.png}}%\n```\n\nCan we modify the PGF backend such that it emits the unscaled raster graphic and uses `interpolate=false`?\n\n---\n\nI'm willing to work on this myself, but would appreciate some guidance. Looking through the code, the image is written in https://github.com/matplotlib/matplotlib/blob/f1bab50/lib/matplotlib/backends/backend_pgf.py#L612.\nThe corresponding code in the PDF backend starts at https://github.com/matplotlib/matplotlib/blob/f1bab50/lib/matplotlib/backends/backend_pdf.py#L1600.\nIt overrides the `option_scale_image()` function to return `True`, and it takes an additional `transform` parameter in `draw_image()`. I guess this is where the magic happens -- if there's a transformation to apply, it will get the unmodified image and construct the PDF so the image is scaled appropriately.\nThe documentation on that parameter is scarce (https://github.com/matplotlib/matplotlib/blob/f1bab50/lib/matplotlib/backend_bases.py#L511), but it seems you can convert it into six values giving an affine transformation.\n\nIf I want the PGF backend to handle scaling, will the backend have to handle the full range of possible affine transformations (scaling would suffice for me)? Is the `transform` guaranteed to only be used for `interpolation='none'`, so I can set `interpolate=false` in this case? Is there any better documentation on the `transform`?\n","author":{"url":"https://github.com/f0k","@type":"Person","name":"f0k"},"datePublished":"2016-07-14T19:11:36.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":7},"url":"https://github.com/6740/matplotlib/issues/6740"}
| 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:0b1bb19d-2498-66d1-3339-d9b823ea6d5d |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | 9D48:277986:2B582C:3A23C6:6A5259B0 |
| html-safe-nonce | bd05ace79e68376303823259db8814b67b6692a266376f5049d6d19c6f1eff3f |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI5RDQ4OjI3Nzk4NjoyQjU4MkM6M0EyM0M2OjZBNTI1OUIwIiwidmlzaXRvcl9pZCI6IjQ3OTU1NDgzNjQ2NTI1NjY5NjEiLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ== |
| visitor-hmac | b16e61eb7c41e818de3bd8765b7d145b6f32147fc9f901440ec14ca60b8a33ec |
| hovercard-subject-tag | issue:165636108 |
| 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/6740/issue_layout |
| twitter:image | https://opengraph.githubassets.com/726d70099d233ee344d0a261788457088d2599ab13a60e8137e98074e4170f12/matplotlib/matplotlib/issues/6740 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/726d70099d233ee344d0a261788457088d2599ab13a60e8137e98074e4170f12/matplotlib/matplotlib/issues/6740 |
| og:image:alt | I'm currently trying to figure out the best way to unify the figures for my thesis, and intend to use the PGF backend to directly \include figures in my LaTeX document. When creating PGF figures th... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | f0k |
| 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 | 7aed05249554b889eb33d002851a973eebcc7e91 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width