diff --git a/pandas/core/groupby/groupby.py b/pandas/core/groupby/groupby.py index fe7bf5bbc4c2c..71f0bcbce2557 100644 --- a/pandas/core/groupby/groupby.py +++ b/pandas/core/groupby/groupby.py @@ -109,9 +109,7 @@ class providing the base-class of operations. SparseArray, ) from pandas.core.arrays.string_ import StringDtype -from pandas.core.arrays.string_arrow import ( - ArrowStringArray, -) +from pandas.core.arrays.string_arrow import ArrowStringArray from pandas.core.base import ( PandasObject, SelectionMixin, @@ -434,11 +432,35 @@ def __init__(self, groupby: GroupBy) -> None: self._groupby = groupby def __call__(self, *args, **kwargs): - def f(self): - return self.plot(*args, **kwargs) + # Patch: assign a unique color from colormap to each group + colormap = kwargs.get("colormap", None) + color = kwargs.get("color", None) + if colormap is not None and color is None: + from pandas.plotting._matplotlib.style import get_standard_colors + + group_keys = list(self._groupby.groups.keys()) + colors = get_standard_colors( + num_colors=len(group_keys), + colormap=colormap, + color_type="default", + ) + kwargs = dict(kwargs) + kwargs.pop("colormap", None) + + def f(group, color, label): + return group.plot(*args, color=color, label=label, **kwargs) + + results = [] + for i, (name, group) in enumerate(self._groupby): + results.append(f(group, colors[i], name)) + return results + else: + + def f(self): + return self.plot(*args, **kwargs) - f.__name__ = "plot" - return self._groupby._python_apply_general(f, self._groupby._selected_obj) + f.__name__ = "plot" + return self._groupby._python_apply_general(f, self._groupby._selected_obj) def __getattr__(self, name: str): def attr(*args, **kwargs):