From b73d8055523e0fe23b5f8368e7a08c20fb30e6f2 Mon Sep 17 00:00:00 2001 From: ImportanceOfBeingErnest Date: Thu, 30 Apr 2020 16:22:15 +0200 Subject: [PATCH] allow numpy arrays in markevery --- lib/matplotlib/lines.py | 7 ++++--- lib/matplotlib/tests/test_lines.py | 24 ++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/lib/matplotlib/lines.py b/lib/matplotlib/lines.py index f5581476498b..6b67566103b6 100644 --- a/lib/matplotlib/lines.py +++ b/lib/matplotlib/lines.py @@ -537,7 +537,7 @@ def set_markevery(self, every): Parameters ---------- every : None or int or (int, int) or slice or List[int] or float or \ -(float, float) +(float, float) or List[bool] Which markers to plot. - every=None, every point will be plotted. @@ -549,6 +549,8 @@ def set_markevery(self, every): point start, up to but not including point end, will be plotted. - every=[i, j, m, n], only markers at points i, j, m, and n will be plotted. + - every=[True, False, True], positions that are True will be + plotted. - every=0.1, (i.e. a float) then markers will be spaced at approximately equal distances along the line; the distance along the line between markers is determined by multiplying the @@ -580,9 +582,8 @@ def set_markevery(self, every): axes-bounding-box-diagonal regardless of the actual axes data limits. """ - if self._markevery != every: - self.stale = True self._markevery = every + self.stale = True def get_markevery(self): """ diff --git a/lib/matplotlib/tests/test_lines.py b/lib/matplotlib/tests/test_lines.py index d66509b0ee78..8d8a4dc30dcd 100644 --- a/lib/matplotlib/tests/test_lines.py +++ b/lib/matplotlib/tests/test_lines.py @@ -199,6 +199,30 @@ def test_step_markers(fig_test, fig_ref): fig_ref.subplots().plot([0, 0, 1], [0, 1, 1], "-o", markevery=[0, 2]) +@check_figures_equal(extensions=('png',)) +def test_markevery(fig_test, fig_ref): + np.random.seed(42) + t = np.linspace(0, 3, 14) + y = np.random.rand(len(t)) + + casesA = [None, 4, (2, 5), [1, 5, 11], + [0, -1], slice(5, 10, 2), 0.3, (0.3, 0.4), + np.arange(len(t))[y > 0.5]] + casesB = ["11111111111111", "10001000100010", "00100001000010", + "01000100000100", "10000000000001", "00000101010000", + "11011011011110", "01010011011101", "01110001110110"] + + axsA = fig_ref.subplots(3, 3) + axsB = fig_test.subplots(3, 3) + + for ax, case in zip(axsA.flat, casesA): + ax.plot(t, y, "-gD", markevery=case) + + for ax, case in zip(axsB.flat, casesB): + me = np.array(list(case)).astype(int).astype(bool) + ax.plot(t, y, "-gD", markevery=me) + + def test_marker_as_markerstyle(): fig, ax = plt.subplots() line, = ax.plot([2, 4, 3], marker=MarkerStyle("D"))