Title: [Bug]: broken 'proportional' colorbar when using contourf+cmap+norm+extend · Issue #20963 · matplotlib/matplotlib · GitHub
Open Graph Title: [Bug]: broken 'proportional' colorbar when using contourf+cmap+norm+extend · Issue #20963 · matplotlib/matplotlib
X Title: [Bug]: broken 'proportional' colorbar when using contourf+cmap+norm+extend · Issue #20963 · matplotlib/matplotlib
Description: Bug summary I get a broken colorbar (see Outcome below) when using contourf and specifiying colors with cmap and norm instead of colors, and requesting a proportional colorbar, and using extend Code for reproduction import numpy as np im...
Open Graph Description: Bug summary I get a broken colorbar (see Outcome below) when using contourf and specifiying colors with cmap and norm instead of colors, and requesting a proportional colorbar, and using extend Cod...
X Description: Bug summary I get a broken colorbar (see Outcome below) when using contourf and specifiying colors with cmap and norm instead of colors, and requesting a proportional colorbar, and using extend Cod...
Opengraph URL: https://github.com/matplotlib/matplotlib/issues/20963
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"[Bug]: broken 'proportional' colorbar when using contourf+cmap+norm+extend","articleBody":"### Bug summary\r\n\r\nI get a **broken colorbar** (see _Outcome_ below) when using `contourf` **and** specifiying colors with `cmap` **and** `norm` instead of `colors`, **and** requesting a _proportional_ colorbar, **and** using `extend`\r\n\r\n### Code for reproduction\r\n\r\n```python\r\nimport numpy as np\r\nimport matplotlib.pyplot as plt\r\nimport matplotlib as mpl\r\n\r\n# Data definition and plot based on the Official contourf demo\r\n# https://matplotlib.org/stable/gallery/images_contours_and_fields/contourf_demo.html\r\n\r\norigin = 'lower'\r\n\r\ndelta = 0.025\r\n\r\nx = y = np.arange(-3.0, 3.01, delta)\r\nX, Y = np.meshgrid(x, y)\r\nZ1 = np.exp(-X**2 - Y**2)\r\nZ2 = np.exp(-(X - 1)**2 - (Y - 1)**2)\r\nZ = (Z1 - Z2) * 2\r\n\r\nnr, nc = Z.shape\r\n\r\nfig2, ax2 = plt.subplots()\r\n\r\n# Original demo levels\r\n# levels = [-1.5, -1, -0.5, 0, 0.5, 1]\r\n\r\n# Irregular levels because we want to use a colorbar with\r\n# spacing='proportional'\r\nlevels = [-1.25, -0.5, -0.125, 0.125, 0.5, 1.25]\r\n\r\n# Define a colormap and norm instead of using 'colors=' in the\r\n# contourf call, BECAUSE we want to use the same cmap and norm for\r\n# scatter and pcolormesh plots\r\ncmap = mpl.colors.ListedColormap(['r', 'g', 'white', 'g', 'r'])\r\ncmap.set_under('yellow')\r\ncmap.set_over('cyan')\r\nnorm = mpl.colors.BoundaryNorm(levels, cmap.N)\r\n\r\nCS3 = ax2.contourf(X, Y, Z, levels,\r\n \r\n # NO PROBLEM with spacing='proportional' if we\r\n # define the colors with 'colors='\r\n #\r\n # colors=('r', 'g', 'b'),\r\n \r\n # The problem appears when we use cmap and norm\r\n cmap=cmap,\r\n norm=norm,\r\n origin=origin,\r\n \r\n # NO PROBLEM with spacing='proportional' if we dont\r\n # use extend\r\n # extend='min'\r\n extend='both'\r\n)\r\n\r\n# Our data range extends outside the range of levels; make\r\n# data below the lowest contour level yellow, and above the\r\n# highest level cyan:\r\n# CS3.cmap.set_under('yellow')\r\n# CS3.cmap.set_over('cyan')\r\n\r\nax2.set_title('Listed colors')\r\n\r\n# Notice that the colorbar gets all the information it\r\n# needs from the ContourSet object, CS3.\r\nfig2.colorbar(CS3,\r\n # BROKEN colorbar if we use proportional spacing\r\n spacing='proportional',\r\n # spacing='uniform',\r\n)\r\n\r\nfig2.savefig('test_cb.png')\r\n\r\nplt.show()\r\n```\r\n\r\n\r\n### Actual outcome\r\n\r\n I get the following warning\r\n```\r\n/home/share/unix_files/cdat/miniconda3_21-02/envs/cdatm_py3/lib/python3.8/site-packages/matplotlib/colorbar.py:1083: RuntimeWarning: invalid value encountered in double_scalars\r\n automin = (y[2] - y[1]) / clen\r\n/home/share/unix_files/cdat/miniconda3_21-02/envs/cdatm_py3/lib/python3.8/site-packages/matplotlib/colorbar.py:1084: RuntimeWarning: invalid value encountered in double_scalars\r\n automax = (y[-2] - y[-3]) / clen\r\n```\r\nand a **broken colorbar** looking like\r\n\r\n\r\n\r\n\r\n### Expected outcome\r\n\r\nThe colorbar is OK if I do use not all the _ands_ specified above. Example below with `spacing='uniform'` instead of _proportional_\r\n\r\n\r\n\r\n### Operating system\r\n\r\nCentOS Linux release 7.9.2009 (Core)\r\n\r\n### Matplotlib Version\r\n\r\n3.3.4\r\n\r\n### Matplotlib Backend\r\n\r\n'Qt5Agg' and 'Agg'\r\n\r\n### Python version\r\n\r\n3.8.8\r\n\r\n### Jupyter version\r\n\r\n_No response_\r\n\r\n### Other libraries\r\n\r\n_No response_\r\n\r\n### Installation\r\n\r\nconda\r\n\r\n### Conda channel\r\n\r\nconda-forge","author":{"url":"https://github.com/jypeter","@type":"Person","name":"jypeter"},"datePublished":"2021-09-01T14:14:52.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":5},"url":"https://github.com/20963/matplotlib/issues/20963"}
| 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:81fb27e8-e987-4a15-8c66-cab8888d0f55 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | AE64:1461B5:197392:239532:6A532FEB |
| html-safe-nonce | 498a62c4abcb38d56bb78897346be0f40a08fc20d4b886bc5c9761cb93b6eae6 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJBRTY0OjE0NjFCNToxOTczOTI6MjM5NTMyOjZBNTMyRkVCIiwidmlzaXRvcl9pZCI6IjUwMTQ2MDU4ODMwMjU2MDA0OTEiLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ== |
| visitor-hmac | 5b7997bcef5c61886bdba3bf1761de9b39e330fb36acb54e7cd293a21d0b242c |
| hovercard-subject-tag | issue:985209612 |
| 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/20963/issue_layout |
| twitter:image | https://opengraph.githubassets.com/3a6f818e57bea4d3ffeefe65345df91e064c34e226a5f7ddd356a820bdd9724a/matplotlib/matplotlib/issues/20963 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/3a6f818e57bea4d3ffeefe65345df91e064c34e226a5f7ddd356a820bdd9724a/matplotlib/matplotlib/issues/20963 |
| og:image:alt | Bug summary I get a broken colorbar (see Outcome below) when using contourf and specifiying colors with cmap and norm instead of colors, and requesting a proportional colorbar, and using extend Cod... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | jypeter |
| 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