Title: 3D Scatter Plot with Colorbar is not saved correctly with savefig · Issue #18885 · matplotlib/matplotlib · GitHub
Open Graph Title: 3D Scatter Plot with Colorbar is not saved correctly with savefig · Issue #18885 · matplotlib/matplotlib
X Title: 3D Scatter Plot with Colorbar is not saved correctly with savefig · Issue #18885 · matplotlib/matplotlib
Description: Bug report Bug summary When saving a 3D scatter plot with a color bar using savefig (either plt.savefig or fig.savefig), the data point colors are incorrect on the saved image, however the inline image (I'm using jupyter lab notebooks) i...
Open Graph Description: Bug report Bug summary When saving a 3D scatter plot with a color bar using savefig (either plt.savefig or fig.savefig), the data point colors are incorrect on the saved image, however the inline i...
X Description: Bug report Bug summary When saving a 3D scatter plot with a color bar using savefig (either plt.savefig or fig.savefig), the data point colors are incorrect on the saved image, however the inline i...
Opengraph URL: https://github.com/matplotlib/matplotlib/issues/18885
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"3D Scatter Plot with Colorbar is not saved correctly with savefig","articleBody":"\u003c!--To help us understand and resolve your issue, please fill out the form to the best of your ability.--\u003e\r\n\u003c!--You can feel free to delete the sections that do not apply.--\u003e\r\n\r\n### Bug report\r\n\r\n**Bug summary**\r\n\r\nWhen saving a 3D scatter plot with a color bar using `savefig` (either `plt.savefig` or `fig.savefig`), the data point colors are incorrect on the saved image, however the inline image (I'm using jupyter lab notebooks) is fine, the issue is only present when saving the figure. Note that this only happens when a colorbar is added to the figure, when a figure with points colored according to a set of values is saved, the issue does not occur. So it would seem that this issue is caused by some interaction of savefig and colorbar. \r\n\r\nI've tried both matplotlib version 3.3.1 and 3.3.2 and in both versions this occurs. I've also tried downgrading to version 3.2.1, in version 3.2.1 this does not occur, so it seems some change in 3.3.1 is the cause of this issue.\r\n\r\n**Code for reproduction**\r\n\r\n\u003c!--A minimum code snippet required to reproduce the bug.\r\nPlease make sure to minimize the number of dependencies required, and provide\r\nany necessary plotted data.\r\nAvoid using threads, as Matplotlib is (explicitly) not thread-safe.--\u003e\r\n\r\nRequirements: matplotlib 3.3.1 or 3.3.2 \r\n\r\nThe following requirements are purely for setting up an example dataset which I used in the following code snippet to generate an example dataset to plot, as such I'm not listing the version numbers.\r\n\r\nOptional: pandas, numpy\r\n\r\nAlso note that I used JupyterLab notebook to run the code, although given that I was able to 'fix' the issue by downgrading to matplotlib version 3.2.1 I don't think there is any link between running the code in JupyterLab and the issue itself.\r\n\r\n```python\r\n\r\n#importing packages \r\nimport matplotlib.pyplot as plt\r\n\r\nimport numpy as np\r\nimport itertools\r\nimport pandas as pd\r\n\r\n# example data setup \r\ndata = list(itertools.product(*[np.arange(0, 5, 1), np.arange(0, 5, 1), np.arange(0, 5, 1)]))\r\ndf = pd.DataFrame(data, columns=['x', 'y', 'z'])\r\n\r\ndf['c'] = df['x'] + df['y']\r\n\r\n# plotting\r\n\r\n## no color bar example (no issue)\r\n\r\nfig = plt.figure()\r\nax = fig.add_subplot(111, projection='3d', proj_type = 'ortho')\r\n\r\nsc = ax.scatter(\r\n df['x'], \r\n df['y'],\r\n df['z'],\r\n c=df['c'],\r\n s=40 # size is purely to make it easier to see\r\n) \r\n\r\nplt.savefig('example no colorbar save.png') # dpi has no effect, purely to make it easier to zoom into the figure\r\n\r\n## color bar example (ISSUE)\r\n\r\nfig = plt.figure()\r\nax = fig.add_subplot(111, projection='3d', proj_type = 'ortho')\r\n\r\nsc = ax.scatter(\r\n df['x'], \r\n df['y'],\r\n df['z'],\r\n c=df['c'],\r\n s=40 # size is purely to make it easier to see\r\n) \r\n\r\nfig.colorbar(sc)\r\n\r\nplt.savefig('example colorbar save.png', dpi=300) # dpi has no effect, purely to make it easier to zoom into the figure\r\n\r\n```\r\n\r\n**Actual outcome**\r\n\r\n\u003c!--The output produced by the above code, which may be a screenshot, console output, etc.--\u003e\r\n\r\n\r\n\r\nThis is being the saved figure with a color bar (note that if you zoom in the outlines of the data points are correct - see expected outcome below - but the fill of the points is incorrect). \r\n\r\nNote that if no colorbar is added, the plot saves correctly as shown below. \r\n\r\n\r\n\r\n\r\n**Expected outcome**\r\n\r\nThis is a screenshot of the colorbar chart as it is shown inline in the JupyterLab notebook.\r\n\r\n\r\n\r\nAnd this is a screenshot of the **non** colorbar chart as it is shown inline in the JupyterLab notebook, note this one is essentially the exact same as the saved version, so the issue is purely with the colorbar/savefig interaction. \r\n\r\n\r\n\r\n\u003c!--A description of the expected outcome from the code snippet--\u003e\r\n\u003c!--If this used to work in an earlier version of Matplotlib, please note the version it used to work on--\u003e\r\n\r\n**Matplotlib version**\r\n\u003c!--Please specify your platform and versions of the relevant libraries you are using:--\u003e\r\n * Operating system: Windows 10\r\n * Matplotlib version: 3.3.2\r\n * Matplotlib backend (`print(matplotlib.get_backend())`):\r\n * Python version: 3.8.5\r\n * Jupyter version (if applicable): 2.2.6\r\n * Other libraries: pandas, numpy, itertools (python built in library) \r\n\r\nEverything has been installed via conda, with all packages listed being install from the default channel. \r\n\r\n\u003c!--Please tell us how you installed matplotlib and python e.g., from source, pip, conda--\u003e\r\n\u003c!--If you installed from conda, please specify which channel you used if not the default--\u003e\r\n\r\n","author":{"url":"https://github.com/JakubPolanowski","@type":"Person","name":"JakubPolanowski"},"datePublished":"2020-11-03T20:04:13.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":7},"url":"https://github.com/18885/matplotlib/issues/18885"}
| 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:c0c83d97-d02b-e9d5-3ff8-224bba8e804d |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | A878:81B93:389B27:4C084C:6A518FBE |
| html-safe-nonce | b2b1889175af9ebba31f17ab76117b0a2d07b925cf3d333857e5f6e3eb5dead7 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJBODc4OjgxQjkzOjM4OUIyNzo0QzA4NEM6NkE1MThGQkUiLCJ2aXNpdG9yX2lkIjoiNDA4ODczNTIxMzE4MTU3MTAwNiIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 |
| visitor-hmac | 0c6490406c4c026adcb669465c8ef31cf2b9dffdfcb5e25e03d156db3efb1e55 |
| hovercard-subject-tag | issue:735600573 |
| 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/18885/issue_layout |
| twitter:image | https://opengraph.githubassets.com/db79e153b7a5df051fa66c360ca2422be98c5ae34c84b02256df5e05674524bd/matplotlib/matplotlib/issues/18885 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/db79e153b7a5df051fa66c360ca2422be98c5ae34c84b02256df5e05674524bd/matplotlib/matplotlib/issues/18885 |
| og:image:alt | Bug report Bug summary When saving a 3D scatter plot with a color bar using savefig (either plt.savefig or fig.savefig), the data point colors are incorrect on the saved image, however the inline i... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | JakubPolanowski |
| 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