From 07f34aa9aceeadecc9a32bf9e8f15b9843b15dab Mon Sep 17 00:00:00 2001 From: Elliott Sales de Andrade Date: Wed, 13 Mar 2024 20:20:07 -0400 Subject: [PATCH] Avoid modifying user input to Axes.bar The `error_kw` parameter is a dictionary, on which `setdefault` and `pop` are called, which would modify user input. --- lib/matplotlib/axes/_axes.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/matplotlib/axes/_axes.py b/lib/matplotlib/axes/_axes.py index e2b8d13b52a2..627dd2c36d40 100644 --- a/lib/matplotlib/axes/_axes.py +++ b/lib/matplotlib/axes/_axes.py @@ -2434,7 +2434,8 @@ def bar(self, x, height, width=0.8, bottom=None, *, align="center", # checking and processing will be left to the errorbar method. xerr = kwargs.pop('xerr', None) yerr = kwargs.pop('yerr', None) - error_kw = kwargs.pop('error_kw', {}) + error_kw = kwargs.pop('error_kw', None) + error_kw = {} if error_kw is None else error_kw.copy() ezorder = error_kw.pop('zorder', None) if ezorder is None: ezorder = kwargs.get('zorder', None) @@ -2590,9 +2591,8 @@ def bar(self, x, height, width=0.8, bottom=None, *, align="center", error_kw.setdefault("label", '_nolegend_') - errorbar = self.errorbar(ex, ey, - yerr=yerr, xerr=xerr, - fmt='none', **error_kw) + errorbar = self.errorbar(ex, ey, yerr=yerr, xerr=xerr, fmt='none', + **error_kw) else: errorbar = None