Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork7.9k
Description
Bug summary
scatter plot can handle categorical data and list of lists separately, but cannot handle then both that seems inconsistent. Looks at the examples
Code for reproduction
importmatplotlib.pyplotasplt# runsplt.scatter([1,2,3], ["a","b","a"])plt.show()# runsplt.scatter([[1,0],[0,1]], [[1,2], [2,3]])plt.show()# failsplt.scatter([[1,0],[0,1]], [["a","b"], ["b","a"]])plt.show()
Actual outcome
ValueError Traceback (most recent call last)
Cell In[51], line 11
8 plt.show()
10 # fails
---> 11 plt.scatter([[1, 0],[ 0, 1]],
12 [["a", "b"], ["b", "a"]])
13 plt.show()
File ~\anaconda3\lib\site-packages\matplotlib\pyplot.py:2862, in scatter(x, y, s, c, marker, cmap, norm, vmin, vmax, alpha, linewidths, edgecolors, plotnonfinite, data, **kwargs)
2857 @_copy_docstring_and_deprecators(Axes.scatter)
2858 def scatter(
2859 x, y, s=None, c=None, marker=None, cmap=None, norm=None,
2860 vmin=None, vmax=None, alpha=None, linewidths=None, *,
2861 edgecolors=None, plotnonfinite=False, data=None, **kwargs):
-> 2862 __ret = gca().scatter(
2863 x, y, s=s, c=c, marker=marker, cmap=cmap, norm=norm,
2864 vmin=vmin, vmax=vmax, alpha=alpha, linewidths=linewidths,
2865 edgecolors=edgecolors, plotnonfinite=plotnonfinite,
2866 **({"data": data} if data is not None else {}), **kwargs)
2867 sci(__ret)
2868 return __ret
File ~\anaconda3\lib\site-packages\matplotlib_init_.py:1459, in _preprocess_data..inner(ax, data, *args, **kwargs)
1456 @functools.wraps(func)
1457 def inner(ax, *args, data=None, **kwargs):
1458 if data is None:
-> 1459 return func(ax, *map(sanitize_sequence, args), **kwargs)
1461 bound = new_sig.bind(ax, *args, **kwargs)
1462 auto_label = (bound.arguments.get(label_namer)
1463 or bound.kwargs.get(label_namer))
File ~\anaconda3\lib\site-packages\matplotlib\axes_axes.py:4673, in Axes.scatter(self, x, y, s, c, marker, cmap, norm, vmin, vmax, alpha, linewidths, edgecolors, plotnonfinite, **kwargs)
4667 linewidths = [
4668 lw if lw is not None else mpl.rcParams['lines.linewidth']
4669 for lw in linewidths]
4671 offsets = np.ma.column_stack([x, y])
-> 4673 collection = mcoll.PathCollection(
4674 (path,), scales,
4675 facecolors=colors,
4676 edgecolors=edgecolors,
4677 linewidths=linewidths,
4678 offsets=offsets,
4679 offset_transform=kwargs.pop('transform', self.transData),
4680 alpha=alpha,
4681 )
4682 collection.set_transform(mtransforms.IdentityTransform())
4683 if colors is None:
File ~\anaconda3\lib\site-packages\matplotlib\collections.py:994, in PathCollection.init(self, paths, sizes, **kwargs)
980 definit(self, paths, sizes=None, **kwargs):
981 """
982 Parameters
983 ----------
(...)
991 Forwarded to.Collection
.
992 """
--> 994 super().init(**kwargs)
995 self.set_paths(paths)
996 self.set_sizes(sizes)
File ~\anaconda3\lib\site-packages\matplotlib_api\deprecation.py:454, in make_keyword_only..wrapper(*args, **kwargs)
448 if len(args) > name_idx:
449 warn_deprecated(
450 since, message="Passing the %(name)s %(obj_type)s "
451 "positionally is deprecated since Matplotlib %(since)s; the "
452 "parameter will become keyword-only %(removal)s.",
453 name=name, obj_type=f"parameter of {func.name}()")
--> 454 return func(*args, **kwargs)
File ~\anaconda3\lib\site-packages\matplotlib\collections.py:192, in Collection.init(self, edgecolors, facecolors, linewidths, linestyles, capstyle, joinstyle, antialiaseds, offsets, offset_transform, norm, cmap, pickradius, hatch, urls, zorder, **kwargs)
189 self._joinstyle = None
191 if offsets is not None:
--> 192 offsets = np.asanyarray(offsets, float)
193 # Broadcast (2,) -> (1, 2) but nothing else.
194 if offsets.shape == (2,):
ValueError: could not convert string to float: 'a'
Expected outcome
it should provide plot with categorical data on y-axis
Additional information
No response
Operating system
Windows
Matplotlib Version
3.7.1
Matplotlib Backend
module://matplotlib_inline.backend_inline
Python version
3.10.12
Jupyter version
6.5.3
Installation
conda