Title: plt.scatter, error with NaN values and edge color · Issue #19066 · matplotlib/matplotlib · GitHub
Open Graph Title: plt.scatter, error with NaN values and edge color · Issue #19066 · matplotlib/matplotlib
X Title: plt.scatter, error with NaN values and edge color · Issue #19066 · matplotlib/matplotlib
Description: Bug report Bug summary When plotting a scatter plot with y containing NaN values, depending on the number of values, an error comes up when setting the color or edgecolor. This error was introduced with version 3.3.0, might be linked to ...
Open Graph Description: Bug report Bug summary When plotting a scatter plot with y containing NaN values, depending on the number of values, an error comes up when setting the color or edgecolor. This error was introduced...
X Description: Bug report Bug summary When plotting a scatter plot with y containing NaN values, depending on the number of values, an error comes up when setting the color or edgecolor. This error was introduced...
Opengraph URL: https://github.com/matplotlib/matplotlib/issues/19066
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"plt.scatter, error with NaN values and edge color","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\nWhen plotting a `scatter` plot with y containing NaN values, depending on the number of values, an error comes up when setting the `color` or `edgecolor`.\r\nThis error was introduced with version 3.3.0, might be linked to #17849\r\n\u003c!--A short 1-2 sentences that succinctly describes the bug--\u003e\r\n\r\n**Code for reproduction**\r\nHere is a basic example\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\n```python\r\nimport matplotlib.pyplot as plt\r\nimport numpy as np\r\nplt.scatter([1, 2, 3], [ 0, np.nan, 2],color=(1, 0, 0))\r\n```\r\n\r\n**Actual outcome**\r\n\u003c!--The output produced by the above code, which may be a screenshot, console output, etc.--\u003e\r\n```\r\n---------------------------------------------------------------------------\r\nValueError Traceback (most recent call last)\r\n\u003cipython-input-77-cf954735eeaf\u003e in \u003cmodule\u003e\r\n 1 import matplotlib.pyplot as plt\r\n 2 import numpy as np\r\n----\u003e 3 plt.scatter([1, 2, 3], [ 0, np.nan, 2],color=(1, 0, 0))\r\n\r\n/usr/local/lib/python3.9/site-packages/matplotlib/pyplot.py in scatter(x, y, s, c, marker, cmap, norm, vmin, vmax, alpha, linewidths, verts, edgecolors, plotnonfinite, data, **kwargs)\r\n 2888 verts=cbook.deprecation._deprecated_parameter,\r\n 2889 edgecolors=None, *, plotnonfinite=False, data=None, **kwargs):\r\n-\u003e 2890 __ret = gca().scatter(\r\n 2891 x, y, s=s, c=c, marker=marker, cmap=cmap, norm=norm,\r\n 2892 vmin=vmin, vmax=vmax, alpha=alpha, linewidths=linewidths,\r\n\r\n/usr/local/lib/python3.9/site-packages/matplotlib/__init__.py in inner(ax, data, *args, **kwargs)\r\n 1445 def inner(ax, *args, data=None, **kwargs):\r\n 1446 if data is None:\r\n-\u003e 1447 return func(ax, *map(sanitize_sequence, args), **kwargs)\r\n 1448 \r\n 1449 bound = new_sig.bind(ax, *args, **kwargs)\r\n\r\n/usr/local/lib/python3.9/site-packages/matplotlib/cbook/deprecation.py in wrapper(*inner_args, **inner_kwargs)\r\n 409 else deprecation_addendum,\r\n 410 **kwargs)\r\n--\u003e 411 return func(*inner_args, **inner_kwargs)\r\n 412 \r\n 413 return wrapper\r\n\r\n/usr/local/lib/python3.9/site-packages/matplotlib/axes/_axes.py in scatter(self, x, y, s, c, marker, cmap, norm, vmin, vmax, alpha, linewidths, verts, edgecolors, plotnonfinite, **kwargs)\r\n 4486 offsets = np.ma.column_stack([x, y])\r\n 4487 \r\n-\u003e 4488 collection = mcoll.PathCollection(\r\n 4489 (path,), scales,\r\n 4490 facecolors=colors,\r\n\r\n/usr/local/lib/python3.9/site-packages/matplotlib/collections.py in __init__(self, paths, sizes, **kwargs)\r\n 951 \"\"\"\r\n 952 \r\n--\u003e 953 super().__init__(**kwargs)\r\n 954 self.set_paths(paths)\r\n 955 self.set_sizes(sizes)\r\n\r\n/usr/local/lib/python3.9/site-packages/matplotlib/cbook/deprecation.py in wrapper(*inner_args, **inner_kwargs)\r\n 409 else deprecation_addendum,\r\n 410 **kwargs)\r\n--\u003e 411 return func(*inner_args, **inner_kwargs)\r\n 412 \r\n 413 return wrapper\r\n\r\n/usr/local/lib/python3.9/site-packages/matplotlib/collections.py in __init__(self, edgecolors, facecolors, linewidths, linestyles, capstyle, joinstyle, antialiaseds, offsets, transOffset, norm, cmap, pickradius, hatch, urls, offset_position, zorder, **kwargs)\r\n 173 self._hatch_color = mcolors.to_rgba(mpl.rcParams['hatch.color'])\r\n 174 self.set_facecolor(facecolors)\r\n--\u003e 175 self.set_edgecolor(edgecolors)\r\n 176 self.set_linewidth(linewidths)\r\n 177 self.set_linestyle(linestyles)\r\n\r\n/usr/local/lib/python3.9/site-packages/matplotlib/collections.py in set_edgecolor(self, c)\r\n 828 \"\"\"\r\n 829 self._original_edgecolor = c\r\n--\u003e 830 self._set_edgecolor(c)\r\n 831 \r\n 832 def set_alpha(self, alpha):\r\n\r\n/usr/local/lib/python3.9/site-packages/matplotlib/collections.py in _set_edgecolor(self, c)\r\n 812 except AttributeError:\r\n 813 pass\r\n--\u003e 814 self._edgecolors = mcolors.to_rgba_array(c, self._alpha)\r\n 815 if set_hatch_color and len(self._edgecolors):\r\n 816 self._hatch_color = tuple(self._edgecolors[0])\r\n\r\n/usr/local/lib/python3.9/site-packages/matplotlib/colors.py in to_rgba_array(c, alpha)\r\n 339 return np.zeros((0, 4), float)\r\n 340 else:\r\n--\u003e 341 return np.array([to_rgba(cc, alpha) for cc in c])\r\n 342 \r\n 343 \r\n\r\n/usr/local/lib/python3.9/site-packages/matplotlib/colors.py in \u003clistcomp\u003e(.0)\r\n 339 return np.zeros((0, 4), float)\r\n 340 else:\r\n--\u003e 341 return np.array([to_rgba(cc, alpha) for cc in c])\r\n 342 \r\n 343 \r\n\r\n/usr/local/lib/python3.9/site-packages/matplotlib/colors.py in to_rgba(c, alpha)\r\n 187 rgba = None\r\n 188 if rgba is None: # Suppress exception chaining of cache lookup failure.\r\n--\u003e 189 rgba = _to_rgba_no_colorcycle(c, alpha)\r\n 190 try:\r\n 191 _colors_full_map.cache[c, alpha] = rgba\r\n\r\n/usr/local/lib/python3.9/site-packages/matplotlib/colors.py in _to_rgba_no_colorcycle(c, alpha)\r\n 261 # tuple color.\r\n 262 if not np.iterable(c):\r\n--\u003e 263 raise ValueError(f\"Invalid RGBA argument: {orig_c!r}\")\r\n 264 if len(c) not in [3, 4]:\r\n 265 raise ValueError(\"RGBA sequence should have length 3 or 4\")\r\n\r\nValueError: Invalid RGBA argument: 1\r\n```\r\n\r\n**First analys**\r\nIt is only affects the `edgecolor` option, `facecolor` works fine:\r\n```python\r\n# This work fine\r\nplt.scatter([1, 2, 3], [ 0, np.nan, 2])\r\nplt.scatter([1, 2, 3], [ 0, np.nan, 2], facecolor=(1, 0, 0))\r\n```\r\n\r\nIt also seem to be only happening when there are 3 values to plot, 1 or 2 of them being NaNs:\r\n\r\n```python\r\n# These all work\r\nplt.scatter([1, 2], [1, np.nan ],color=(1, 0, 0))\r\nplt.scatter([1, 2, 3, 4], [1, 2, np.nan, 4 ],color=(1, 0, 0))\r\nplt.scatter([1, 2, 3, 4, 5], [1, 2, np.nan, 4, 5 ],color=(1, 0, 0))\r\nplt.scatter([1, 2, 3], [np.nan , np.nan , np.nan ],color=(1, 0, 0))\r\nplt.scatter(np.arange(1000), np.append(np.random.rand(999),np.NaN),color=(1, 0, 0))\r\n\r\n# But those not\r\nplt.scatter([1, 2, 3], [1, np.nan, np.nan ],color=(1, 0, 0))\r\nplt.scatter([1, 2, 3], [ np.nan, 2, np.nan ],color=(1, 0, 0))\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\nError was discovered through seaborn, mwaskom/seaborn#2373\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: Mac OS 10.15 / Windows 10\r\n * Matplotlib version: \u003e= 3.3.0\r\n * Matplotlib backend (`print(matplotlib.get_backend())`): module://ipykernel.pylab.backend_inline\r\n * Python version: 3.8, 3.9.0\r\n * Jupyter version (if applicable): 2.2.9\r\n * Other libraries: \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/donok1","@type":"Person","name":"donok1"},"datePublished":"2020-12-04T21:42:04.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":4},"url":"https://github.com/19066/matplotlib/issues/19066"}
| 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:b67d6b25-234f-1797-9f7c-72ddceca3853 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | AC30:12305D:85EF96:B4103E:6A528C09 |
| html-safe-nonce | e3271948a73fa940aba17616d78ea3ca93aba97aefe8b0eb8f0a2a52fe0f8d44 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJBQzMwOjEyMzA1RDo4NUVGOTY6QjQxMDNFOjZBNTI4QzA5IiwidmlzaXRvcl9pZCI6IjE5MDczODkxMTUzMDcwMzU2NTciLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ== |
| visitor-hmac | 6d234bab588332a0b20247fb6a0ac68f1337eca2b12510767aba8dbfd5424b21 |
| hovercard-subject-tag | issue:757425725 |
| 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/19066/issue_layout |
| twitter:image | https://opengraph.githubassets.com/fbc0a706270cf0da094fdb4dd52267166b4621cd4f33f527b35519cb2de670b9/matplotlib/matplotlib/issues/19066 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/fbc0a706270cf0da094fdb4dd52267166b4621cd4f33f527b35519cb2de670b9/matplotlib/matplotlib/issues/19066 |
| og:image:alt | Bug report Bug summary When plotting a scatter plot with y containing NaN values, depending on the number of values, an error comes up when setting the color or edgecolor. This error was introduced... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | donok1 |
| 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