From e5421ab3cfb4e3960c4095ca23aa131fbbacb1d2 Mon Sep 17 00:00:00 2001 From: Jody Klymak Date: Sun, 7 Oct 2018 10:10:13 -0700 Subject: [PATCH 1/3] FIX: allow single-string color for scatter --- lib/matplotlib/axes/_axes.py | 2 +- lib/matplotlib/tests/test_axes.py | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/matplotlib/axes/_axes.py b/lib/matplotlib/axes/_axes.py index 1915d00bbedc..57128cfef91e 100644 --- a/lib/matplotlib/axes/_axes.py +++ b/lib/matplotlib/axes/_axes.py @@ -4184,7 +4184,7 @@ def scatter(self, x, y, s=None, c=None, marker=None, cmap=None, norm=None, valid_shape = True # will be put to the test! n_elem = -1 # used only for (some) exceptions - if c_none or co is not None: + if c_none or co is not None or isinstance(c, str): c_array = None else: try: # First, does 'c' look suitable for value-mapping? diff --git a/lib/matplotlib/tests/test_axes.py b/lib/matplotlib/tests/test_axes.py index 5533cc0a5b25..c298b58c0e02 100644 --- a/lib/matplotlib/tests/test_axes.py +++ b/lib/matplotlib/tests/test_axes.py @@ -1745,6 +1745,8 @@ def test_scatter_color(self): # scatter plot will have 4 elements. The tuple scheme is: # (*c* parameter case, exception regexp key or None if no exception) params_test_scatter_c = [ + # single string: + ('0.5', None), # Single letter-sequences ("rgby", None), ("rgb", "shape"), From 3243ba8f13d10f36e38145c4d2a4ae9e8ecf4466 Mon Sep 17 00:00:00 2001 From: Jody Klymak Date: Sun, 7 Oct 2018 20:39:36 -0700 Subject: [PATCH 2/3] ENH: allow list of grey strings --- lib/matplotlib/axes/_axes.py | 7 ++++++- setup.py | 20 ++++++++++++++++++-- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/lib/matplotlib/axes/_axes.py b/lib/matplotlib/axes/_axes.py index 57128cfef91e..3791d373311b 100644 --- a/lib/matplotlib/axes/_axes.py +++ b/lib/matplotlib/axes/_axes.py @@ -1,3 +1,4 @@ +import collections import functools import itertools import logging @@ -4184,7 +4185,11 @@ def scatter(self, x, y, s=None, c=None, marker=None, cmap=None, norm=None, valid_shape = True # will be put to the test! n_elem = -1 # used only for (some) exceptions - if c_none or co is not None or isinstance(c, str): + if (c_none or + co is not None or + isinstance(c, str) or + (isinstance(c, collections.Iterable) and + isinstance(c[0], str))): c_array = None else: try: # First, does 'c' look suitable for value-mapping? diff --git a/setup.py b/setup.py index ba59e9284e21..3f5042b80e07 100644 --- a/setup.py +++ b/setup.py @@ -15,13 +15,12 @@ error = """ Matplotlib 3.0+ does not support Python 2.x, 3.0, 3.1, 3.2, 3.3, or 3.4. Beginning with Matplotlib 3.0, Python 3.5 and above is required. - This may be due to an out of date pip. - Make sure you have pip >= 9.0.1. """ sys.exit(error) +import subprocess # The setuptools version of sdist adds a setup.cfg file to the tree. # We don't want that, so we simply remove it, and it will fall back to # vanilla distutils. @@ -105,10 +104,27 @@ def build_extensions(self): self.compiler.compiler_so.remove('-Wstrict-prototypes') except (ValueError, AttributeError): pass + if self._xcode_gte_10(): + # If compiling using Xcode >= 10, need to manually specify the + # -stdlib flag because libstdc++ is no longer available + for mod in self.distribution.ext_modules: + mod.extra_compile_args = ['-stdlib=libc++'] + mod.extra_link_args = ['-stdlib=libc++'] for package in good_packages: package.do_custom_build() return super().build_extensions() + def _xcode_gte_10(self): + if sys.platform != "darwin": + return False + # Returns True if compiler is from Xcode version >= 10 + compiler_version = str(subprocess.check_output( + self.compiler.compiler + ['--version'], universal_newlines=True)) + compiler_version = compiler_version.split(' ') + return ((compiler_version[0] == 'Apple') and + (compiler_version[1] == 'LLVM') and + (int(compiler_version[3].split('.')[0]) >= 10)) + cmdclass = versioneer.get_cmdclass() cmdclass['test'] = NoopTestCommand From 3cd9b69fce0fa28005f94005634fd2215d6ed2f1 Mon Sep 17 00:00:00 2001 From: Jody Klymak Date: Mon, 8 Oct 2018 10:37:14 -0700 Subject: [PATCH 3/3] TST: add test for lits of number strings --- .../baseline_images/test_axes/scatter.pdf | Bin 6812 -> 3572 bytes .../baseline_images/test_axes/scatter.png | Bin 13619 -> 5600 bytes .../baseline_images/test_axes/scatter.svg | 701 +++++------------- lib/matplotlib/tests/test_axes.py | 18 +- setup.py | 20 +- 5 files changed, 203 insertions(+), 536 deletions(-) diff --git a/lib/matplotlib/tests/baseline_images/test_axes/scatter.pdf b/lib/matplotlib/tests/baseline_images/test_axes/scatter.pdf index 814cde183aa2be7bb799747413c36021eca7aa5e..dc4696597ed0c2b1a89cd8eb247f164130d44eb6 100644 GIT binary patch delta 3043 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 h->B^9MSO@E?O&aKiuq literal 6812 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 a2RaDRd#W^tVt}?J;C8|5eC=OC{`MdJsjK_| literal 13619 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 - - + + - - - - + - + - + +" style="fill:#00ff00;stroke:#00ff00;"/> - - - - - - - - + + + + + - - + + + + + - - - - - - - - +L 0 3.5 +" id="m0dc7741f56" style="stroke:#000000;stroke-width:0.8;"/> - - - - - - - - - - + - - - - - - + - - - - - - - - - - + - - - - - - + - - - - - - - - - - + - - - - - - + - - - - - - - - - - + - - - - - - + - - - - - - - - - - + - - - - - - + - - - - - - - - - - + - - - - - - + - - - - - - - - - - + - - - - - - - - - + +L -3.5 0 +" id="mdcf66ab502" style="stroke:#000000;stroke-width:0.8;"/> - - - - - - - - - - - - + - - - - - - + - - - - - - - - - - - - + - - - - - - + - - - - - - - - - + - - - - - - + - - - - - - - - - + - - - - - - + - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + - - + + diff --git a/lib/matplotlib/tests/test_axes.py b/lib/matplotlib/tests/test_axes.py index c298b58c0e02..6ba28e88e029 100644 --- a/lib/matplotlib/tests/test_axes.py +++ b/lib/matplotlib/tests/test_axes.py @@ -1686,16 +1686,16 @@ def test_hist2d_transpose(): class TestScatter(object): - @image_comparison(baseline_images=['scatter', 'scatter']) + @image_comparison(baseline_images=['scatter'], + style='mpl20', remove_text=True) def test_scatter_plot(self): - fig, ax = plt.subplots() - data = {"x": [3, 4, 2, 6], "y": [2, 5, 2, 3], - "c": ['r', 'y', 'b', 'lime'], "s": [24, 15, 19, 29]} - - ax.scatter(data["x"], data["y"], c=data["c"], s=data["s"]) + data = {"x": np.array([3, 4, 2, 6]), "y": np.array([2, 5, 2, 3]), + "c": ['r', 'y', 'b', 'lime'], "s": [24, 15, 19, 29], + "c2": ['0.5', '0.6', '0.7', '0.8']} - # Reuse testcase from above for a labeled data test fig, ax = plt.subplots() + ax.scatter(data["x"] - 1., data["y"] - 1., c=data["c"], s=data["s"]) + ax.scatter(data["x"] + 1., data["y"] + 1., c=data["c2"], s=data["s"]) ax.scatter("x", "y", c="c", s="s", data=data) @image_comparison(baseline_images=['scatter_marker'], remove_text=True, @@ -1765,6 +1765,10 @@ def test_scatter_color(self): ([0.5]*3, None), # should emit a warning for user's eyes though ([0.5]*4, None), # NB: no warning as matching size allows mapping ([0.5]*5, "shape"), + # list of strings: + (['0.5', '0.4', '0.6', '0.7'], None), + (['0.5', 'red', '0.6', 'C5'], None), + (['0.5', 0.5, '0.6', 'C5'], "conversion"), # RGB values ([[1, 0, 0]], None), ([[1, 0, 0]]*3, "shape"), diff --git a/setup.py b/setup.py index 3f5042b80e07..ba59e9284e21 100644 --- a/setup.py +++ b/setup.py @@ -15,12 +15,13 @@ error = """ Matplotlib 3.0+ does not support Python 2.x, 3.0, 3.1, 3.2, 3.3, or 3.4. Beginning with Matplotlib 3.0, Python 3.5 and above is required. + This may be due to an out of date pip. + Make sure you have pip >= 9.0.1. """ sys.exit(error) -import subprocess # The setuptools version of sdist adds a setup.cfg file to the tree. # We don't want that, so we simply remove it, and it will fall back to # vanilla distutils. @@ -104,27 +105,10 @@ def build_extensions(self): self.compiler.compiler_so.remove('-Wstrict-prototypes') except (ValueError, AttributeError): pass - if self._xcode_gte_10(): - # If compiling using Xcode >= 10, need to manually specify the - # -stdlib flag because libstdc++ is no longer available - for mod in self.distribution.ext_modules: - mod.extra_compile_args = ['-stdlib=libc++'] - mod.extra_link_args = ['-stdlib=libc++'] for package in good_packages: package.do_custom_build() return super().build_extensions() - def _xcode_gte_10(self): - if sys.platform != "darwin": - return False - # Returns True if compiler is from Xcode version >= 10 - compiler_version = str(subprocess.check_output( - self.compiler.compiler + ['--version'], universal_newlines=True)) - compiler_version = compiler_version.split(' ') - return ((compiler_version[0] == 'Apple') and - (compiler_version[1] == 'LLVM') and - (int(compiler_version[3].split('.')[0]) >= 10)) - cmdclass = versioneer.get_cmdclass() cmdclass['test'] = NoopTestCommand