Skip to content

Commit

Permalink
Add 'color' and 'size' to arguments (pandas-dev#44856)
Browse files Browse the repository at this point in the history
  • Loading branch information
mosc9575 authored and yehoshuadimarsky committed Jul 13, 2022
1 parent 3f2796b commit 5305c97
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 4 deletions.
1 change: 1 addition & 0 deletions doc/source/whatsnew/v1.5.0.rst
Expand Up @@ -580,6 +580,7 @@ Plotting
- Bug in :meth:`DataFrame.boxplot` that prevented passing in ``xlabel`` and ``ylabel`` (:issue:`45463`)
- Bug in :meth:`DataFrame.boxplot` that prevented specifying ``vert=False`` (:issue:`36918`)
- Bug in :meth:`DataFrame.plot.scatter` that prevented specifying ``norm`` (:issue:`45809`)
- The function :meth:`DataFrame.plot.scatter` now accepts ``color`` as an alias for ``c`` and ``size`` as an alias for ``s`` for consistency to other plotting functions (:issue:`44670`)

Groupby/resample/rolling
^^^^^^^^^^^^^^^^^^^^^^^^
Expand Down
23 changes: 22 additions & 1 deletion pandas/plotting/_core.py
Expand Up @@ -1615,6 +1615,11 @@ def scatter(self, x, y, s=None, c=None, **kwargs):
.. versionchanged:: 1.1.0
size : str, scalar or array-like, optional
Alias for s.
.. versionadded:: 1.5.0
c : str, int or array-like, optional
The color of each point. Possible values are:
Expand All @@ -1628,6 +1633,10 @@ def scatter(self, x, y, s=None, c=None, **kwargs):
- A column name or position whose values will be used to color the
marker points according to a colormap.
color : str, int or array-like, optional
Alias for c.
.. versionadded:: 1.5.0
**kwargs
Keyword arguments to pass on to :meth:`DataFrame.plot`.
Expand Down Expand Up @@ -1666,7 +1675,19 @@ def scatter(self, x, y, s=None, c=None, **kwargs):
... c='species',
... colormap='viridis')
"""
return self(kind="scatter", x=x, y=y, s=s, c=c, **kwargs)
size = kwargs.pop("size", None)
if s is not None and size is not None:
raise TypeError("Specify exactly one of `s` and `size`")
elif s is not None or size is not None:
kwargs["s"] = s if s is not None else size

color = kwargs.pop("color", None)
if c is not None and color is not None:
raise TypeError("Specify exactly one of `c` and `color`")
elif c is not None or color is not None:
kwargs["c"] = c if c is not None else color

return self(kind="scatter", x=x, y=y, **kwargs)

def hexbin(self, x, y, C=None, reduce_C_function=None, gridsize=None, **kwargs):
"""
Expand Down
6 changes: 5 additions & 1 deletion pandas/tests/plotting/frame/test_frame.py
@@ -1,4 +1,3 @@
""" Test cases for DataFrame.plot """
from datetime import (
date,
datetime,
Expand Down Expand Up @@ -653,6 +652,11 @@ def test_plot_scatter(self):
with pytest.raises(TypeError, match=msg):
df.plot.scatter(y="y")

with pytest.raises(TypeError, match="Specify exactly one of `s` and `size`"):
df.plot.scatter(x="x", y="y", s=2, size=2)
with pytest.raises(TypeError, match="Specify exactly one of `c` and `color`"):
df.plot.scatter(x="a", y="b", c="red", color="green")

# GH 6951
axes = df.plot(x="x", y="y", kind="scatter", subplots=True)
self._check_axes_shape(axes, axes_num=1, layout=(1, 1))
Expand Down
5 changes: 3 additions & 2 deletions pandas/tests/plotting/frame/test_frame_color.py
Expand Up @@ -196,14 +196,15 @@ def test_if_scatterplot_colorbars_are_next_to_parent_axes(self):
assert np.isclose(parent_distance, colorbar_distance, atol=1e-7).all()

@pytest.mark.parametrize("cmap", [None, "Greys"])
def test_scatter_with_c_column_name_with_colors(self, cmap):
@pytest.mark.parametrize("kw", ["c", "color"])
def test_scatter_with_c_column_name_with_colors(self, cmap, kw):
# https://github.com/pandas-dev/pandas/issues/34316
df = DataFrame(
[[5.1, 3.5], [4.9, 3.0], [7.0, 3.2], [6.4, 3.2], [5.9, 3.0]],
columns=["length", "width"],
)
df["species"] = ["r", "r", "g", "g", "b"]
ax = df.plot.scatter(x=0, y=1, c="species", cmap=cmap)
ax = df.plot.scatter(x=0, y=1, cmap=cmap, **{kw: "species"})
assert ax.collections[0].colorbar is None

def test_scatter_colors(self):
Expand Down

0 comments on commit 5305c97

Please sign in to comment.