From 9512d323fafb543a9c82abc9bd2a44f96b5c5219 Mon Sep 17 00:00:00 2001 From: Jody Klymak Date: Sun, 7 Mar 2021 13:11:32 -0800 Subject: [PATCH 1/2] ENH: add a copy method to colormaps --- lib/matplotlib/colors.py | 8 +++++++- lib/matplotlib/tests/test_colors.py | 10 ++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/lib/matplotlib/colors.py b/lib/matplotlib/colors.py index 9754d6bf2c56..2498cd116406 100644 --- a/lib/matplotlib/colors.py +++ b/lib/matplotlib/colors.py @@ -561,7 +561,7 @@ def _warn_if_global_cmap_modified(cmap): "colormap. In future versions, you will not be able to " "modify a registered colormap in-place. To remove this " "warning, you can make a copy of the colormap first. " - f'cmap = copy.copy(mpl.cm.get_cmap("{cmap.name}"))' + f'cmap = mpl.cm.get_cmap("{cmap.name}").copy()' ) @@ -845,6 +845,12 @@ def color_block(color): f'over {color_block(self.get_over())}' '') + def copy(self): + """ + Return a copy of the colormap. + """ + return self.__copy__() + class LinearSegmentedColormap(Colormap): """ diff --git a/lib/matplotlib/tests/test_colors.py b/lib/matplotlib/tests/test_colors.py index fff69da380bf..d9c31a148a9b 100644 --- a/lib/matplotlib/tests/test_colors.py +++ b/lib/matplotlib/tests/test_colors.py @@ -150,6 +150,16 @@ def test_colormap_copy(): with np.errstate(invalid='ignore'): ret2 = copied_cmap([-1, 0, .5, 1, np.nan, np.inf]) assert_array_equal(ret1, ret2) + # again with the .copy method: + cmap = plt.cm.Reds + copied_cmap = cmap.copy() + with np.errstate(invalid='ignore'): + ret1 = copied_cmap([-1, 0, .5, 1, np.nan, np.inf]) + cmap2 = copy.copy(copied_cmap) + cmap2.set_bad('g') + with np.errstate(invalid='ignore'): + ret2 = copied_cmap([-1, 0, .5, 1, np.nan, np.inf]) + assert_array_equal(ret1, ret2) def test_colormap_endian(): From 6218e55bde2d976e8448b49bf10c74c9195d5fdb Mon Sep 17 00:00:00 2001 From: Jody Klymak Date: Sun, 7 Mar 2021 15:02:55 -0800 Subject: [PATCH 2/2] Update lib/matplotlib/colors.py Co-authored-by: Tim Hoffmann <2836374+timhoffm@users.noreply.github.com> --- lib/matplotlib/colors.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/lib/matplotlib/colors.py b/lib/matplotlib/colors.py index 2498cd116406..8f2744013202 100644 --- a/lib/matplotlib/colors.py +++ b/lib/matplotlib/colors.py @@ -846,9 +846,7 @@ def color_block(color): '') def copy(self): - """ - Return a copy of the colormap. - """ + """Return a copy of the colormap.""" return self.__copy__()