From 846b1d4c6a8dc3fc105cd21ec3b73e685caf8fdc Mon Sep 17 00:00:00 2001 From: zhuoyahuang97 Date: Sun, 12 Oct 2025 14:50:58 -0400 Subject: [PATCH 1/2] fix passing colormap in GroupByPlot --- pandas/core/groupby/groupby.py | 33 +++++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/pandas/core/groupby/groupby.py b/pandas/core/groupby/groupby.py index fe7bf5bbc4c2c..05a916354e99b 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,30 @@ def __init__(self, groupby: GroupBy) -> None: self._groupby = groupby def __call__(self, *args, **kwargs): - def f(self): - return self.plot(*args, **kwargs) - - f.__name__ = "plot" - return self._groupby._python_apply_general(f, self._groupby._selected_obj) + # 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) def __getattr__(self, name: str): def attr(*args, **kwargs): From 8bdde8577710a768718f294d0002b3a5a1c7be4e Mon Sep 17 00:00:00 2001 From: zhuoyahuang97 Date: Sun, 12 Oct 2025 15:02:50 -0400 Subject: [PATCH 2/2] ruff format --- pandas/core/groupby/groupby.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pandas/core/groupby/groupby.py b/pandas/core/groupby/groupby.py index 05a916354e99b..71f0bcbce2557 100644 --- a/pandas/core/groupby/groupby.py +++ b/pandas/core/groupby/groupby.py @@ -437,6 +437,7 @@ def __call__(self, *args, **kwargs): 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), @@ -445,15 +446,19 @@ def __call__(self, *args, **kwargs): ) 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)