From c71136ee515134147ac4be681025ed26dfb313ee Mon Sep 17 00:00:00 2001 From: Benjamin Root Date: Wed, 19 Nov 2014 22:01:04 -0500 Subject: [PATCH] Initial support for linestyle cycling on plot() Added nominal tests for color and linestyle cycles --- lib/matplotlib/__init__.py | 1 + lib/matplotlib/axes/_axes.py | 4 +- lib/matplotlib/axes/_base.py | 17 + lib/matplotlib/rcsetup.py | 3 + .../test_cycles/color_cycle_basic.pdf | Bin 0 -> 1802 bytes .../test_cycles/color_cycle_basic.png | Bin 0 -> 26808 bytes .../test_cycles/color_cycle_basic.svg | 342 ++++++++++++++++++ .../test_cycles/linestyle_cycle_basic.pdf | Bin 0 -> 1822 bytes .../test_cycles/linestyle_cycle_basic.png | Bin 0 -> 23073 bytes .../test_cycles/linestyle_cycle_basic.svg | 342 ++++++++++++++++++ lib/matplotlib/tests/test_cycles.py | 48 +++ matplotlibrc.template | 8 +- 12 files changed, 762 insertions(+), 3 deletions(-) create mode 100644 lib/matplotlib/tests/baseline_images/test_cycles/color_cycle_basic.pdf create mode 100644 lib/matplotlib/tests/baseline_images/test_cycles/color_cycle_basic.png create mode 100644 lib/matplotlib/tests/baseline_images/test_cycles/color_cycle_basic.svg create mode 100644 lib/matplotlib/tests/baseline_images/test_cycles/linestyle_cycle_basic.pdf create mode 100644 lib/matplotlib/tests/baseline_images/test_cycles/linestyle_cycle_basic.png create mode 100644 lib/matplotlib/tests/baseline_images/test_cycles/linestyle_cycle_basic.svg create mode 100644 lib/matplotlib/tests/test_cycles.py diff --git a/lib/matplotlib/__init__.py b/lib/matplotlib/__init__.py index 2cdb5117fb48..fb9c02427854 100644 --- a/lib/matplotlib/__init__.py +++ b/lib/matplotlib/__init__.py @@ -1442,6 +1442,7 @@ def tk_window_focus(): 'matplotlib.tests.test_triangulation', 'mpl_toolkits.tests.test_mplot3d', 'matplotlib.tests.test_widgets', + 'matplotlib.tests.test_cycles', ] diff --git a/lib/matplotlib/axes/_axes.py b/lib/matplotlib/axes/_axes.py index 4d10e8647e56..05502b1ac1a0 100644 --- a/lib/matplotlib/axes/_axes.py +++ b/lib/matplotlib/axes/_axes.py @@ -1271,7 +1271,9 @@ def plot(self, *args, **kwargs): By default, each line is assigned a different color specified by a 'color cycle'. To change this behavior, you can edit the - axes.color_cycle rcParam. + axes.color_cycle rcParam. Similarly, the default linestyle is + also specified by a 'linestyle cycle'. Edit the axes.linestyle_cycle + rcParam to specify a non-trivial cycle. The following format string characters are accepted to control the line style or marker: diff --git a/lib/matplotlib/axes/_base.py b/lib/matplotlib/axes/_base.py index eff223f92bb4..9a184660cb3e 100644 --- a/lib/matplotlib/axes/_base.py +++ b/lib/matplotlib/axes/_base.py @@ -140,6 +140,7 @@ def __init__(self, axes, command='plot'): self.axes = axes self.command = command self.set_color_cycle() + self.set_linestyle_cycle() def __getstate__(self): # note: it is not possible to pickle a itertools.cycle instance @@ -148,12 +149,18 @@ def __getstate__(self): def __setstate__(self, state): self.__dict__ = state.copy() self.set_color_cycle() + self.set_linestyle_cycle() def set_color_cycle(self, clist=None): if clist is None: clist = rcParams['axes.color_cycle'] self.color_cycle = itertools.cycle(clist) + def set_linestyle_cycle(self, clist=None): + if clist is None: + clist = rcParams['axes.linestyle_cycle'] + self.linestyle_cycle = itertools.cycle(clist) + def __call__(self, *args, **kwargs): if self.axes.xaxis is not None and self.axes.yaxis is not None: @@ -236,6 +243,8 @@ def _makeline(self, x, y, kw, kwargs): kw['color'] = six.next(self.color_cycle) # (can't use setdefault because it always evaluates # its second argument) + if 'linestyle' not in kw and 'linestyle' not in kwargs: + kw['linestyle'] = six.next(self.linestyle_cycle) seg = mlines.Line2D(x, y, axes=self.axes, **kw @@ -955,6 +964,14 @@ def set_color_cycle(self, clist): self._get_lines.set_color_cycle(clist) self._get_patches_for_fill.set_color_cycle(clist) + def set_linestyle_cycle(self, clist): + """ + Set the linestyle cycle for any future plot commands on this Axes. + + *clist* is a list of mpl linestyle specifiers. + """ + self._get_lines.set_linestyle_cycle(clist) + def ishold(self): """return the HOLD status of the axes""" return self._hold diff --git a/lib/matplotlib/rcsetup.py b/lib/matplotlib/rcsetup.py index 67724f1e4c01..36cc45cd1fc0 100644 --- a/lib/matplotlib/rcsetup.py +++ b/lib/matplotlib/rcsetup.py @@ -612,6 +612,9 @@ def __call__(self, s): 'axes.color_cycle': [['b', 'g', 'r', 'c', 'm', 'y', 'k'], validate_colorlist], # cycle of plot # line colors + 'axes.linestyle_cycle': [['-'], + validate_stringlist], # cycle of plot + # line styles 'axes.xmargin': [0, ValidateInterval(0, 1, closedmin=True, closedmax=True)], # margin added to xaxis diff --git a/lib/matplotlib/tests/baseline_images/test_cycles/color_cycle_basic.pdf b/lib/matplotlib/tests/baseline_images/test_cycles/color_cycle_basic.pdf new file mode 100644 index 0000000000000000000000000000000000000000..9a6cb49ca87183e0b3ca18792f86c2a5308b0238 GIT binary patch literal 1802 zcmZ`)Yfw~W7=|LH#UhBt@q&H?3minwWp98&z%Gjf%4K&NiJ}g>XP3og&wBQNYY7gD zg${BtL^GJ6b|Y_)PK6PS41+*AimfqT08xFsFY+$J*@?3I;o{hfPfB}AU2jq8PuF( zkzP(4SRkhO<^AHLwD$A!Drd$Fp*5)s;-YeCgZtv%>&mt4 zn}&_?H%Cur@9xQYn0B_`=hNkl9%1bP{U7!a{)53qgEf5dQh#cATVz7N&v}1x-o1#* z>XskHo65?rWw&ZpB5_xTI)Cwf(t9>#lv3Q=hV&_iy>b_h-+h7a8`5z6(n#`Gd3L$%fW2TJMO>TsQrDUJ$3P|iMDgm$k@K%zc1QO7PXXLIAq@SKZ`` zrpu!PdAG-R>>E7one?UYME$=9I~#m-`;m~o#6?K=PXP@|$})U#PgsSY&H{}OmrNOh zwtif@q$wl3qUO@hjEvrLWB!_(%0OpCz{E&Iq_>0xK20xO*TRoH zbD`gwbKtdWhad0Fs^9leDl0GfzTp^B`fIpi??O*e_YNCk-BK4?7QA5oC)H#YE$C>! znRh4Y#4FL(iUCHd{wA>67$s@&%|F-TKiGl4_jys)m8ZvJ=#y@4`)luVgq~WnDQer- zkK0o*CUnxBW_PAv2tYxYXr@ zz{SXkkBgC0EoX;Px)4$uc9)`4n;@m_l99==*&%oiotvHxpA`&w$m(c=jMJr1Su}y+ zLL4VBg218(Y$YZP!LSg-E_Uid6(n|O0m&NmG^^L;0;5_3a!J(&h%a=Ja;fOq9(aT( z!W<6rSk@SgqSK)fG^0gkz+q-64G#mjfQLPMfLJ6Fh=2w>v*8dR?g0j;4JSkp$vHMm z0wj$A(9_`VqLRA0dDXF*_E+#4dF)fy5;iBQPkWvtw~gd-+m%_N`+$OgaUhyll40!-;zF^2$LA-e$$9?)Mv-Fb literal 0 HcmV?d00001 diff --git a/lib/matplotlib/tests/baseline_images/test_cycles/color_cycle_basic.png b/lib/matplotlib/tests/baseline_images/test_cycles/color_cycle_basic.png new file mode 100644 index 0000000000000000000000000000000000000000..583b7f9f7b1cfeb6f91f5d5bd27a910a09684343 GIT binary patch literal 26808 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lib/matplotlib/tests/baseline_images/test_cycles/linestyle_cycle_basic.pdf b/lib/matplotlib/tests/baseline_images/test_cycles/linestyle_cycle_basic.pdf new file mode 100644 index 0000000000000000000000000000000000000000..1cc3a0c02a57ec36d17a1b4dcf7b063e781678b2 GIT binary patch literal 1822 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�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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lib/matplotlib/tests/test_cycles.py b/lib/matplotlib/tests/test_cycles.py new file mode 100644 index 000000000000..2a3d60dc0379 --- /dev/null +++ b/lib/matplotlib/tests/test_cycles.py @@ -0,0 +1,48 @@ +import numpy as np + +from matplotlib.testing.decorators import image_comparison +import matplotlib.pyplot as plt + + +@image_comparison(baseline_images=['color_cycle_basic'], remove_text=True) +def test_colorcycle_basic(): + fig = plt.figure() + ax = fig.add_subplot(111) + ax.set_color_cycle(['r', 'g', 'y']) + xs = np.arange(10) + ys = 0.25 * xs + 2 + # Should be red + ax.plot(xs, ys) + # Should be green + ys = 0.45 * xs + 3 + ax.plot(xs, ys) + # Should be yellow + ys = 0.65 * xs + 4 + ax.plot(xs, ys) + # Should be red + ys = 0.85 * xs + 5 + ax.plot(xs, ys) + + +@image_comparison(baseline_images=['linestyle_cycle_basic'], remove_text=True) +def test_linestylecycle_basic(): + fig = plt.figure() + ax = fig.add_subplot(111) + ax.set_linestyle_cycle(['-', '--', ':']) + xs = np.arange(10) + # Should be solid + ys = 0.25 * xs + 2 + ax.plot(xs, ys) + # Should be dashed + ys = 0.45 * xs + 3 + ax.plot(xs, ys) + # Should be dotted + ys = 0.65 * xs + 4 + ax.plot(xs, ys) + # Should be solid + ys = 0.85 * xs + 5 + ax.plot(xs, ys) + +if __name__ == '__main__': + import nose + nose.runmodule(argv=['-s', '--with-doctest'], exit=False) diff --git a/matplotlibrc.template b/matplotlibrc.template index 89529327f4b6..8f459291fedd 100644 --- a/matplotlibrc.template +++ b/matplotlibrc.template @@ -79,8 +79,8 @@ backend : %(backend)s # See http://matplotlib.org/api/artist_api.html#module-matplotlib.lines for more # information on line properties. #lines.linewidth : 1.0 # line width in points -#lines.linestyle : - # solid line -#lines.color : blue # has no affect on plot(); see axes.color_cycle +#lines.linestyle : - # no affect on plot(); see axes.linestyle_cycle +#lines.color : blue # no affect on plot(); see axes.color_cycle #lines.marker : None # the default marker #lines.markeredgewidth : 0.5 # the line width around the marker symbol #lines.markersize : 6 # markersize, in points @@ -269,6 +269,10 @@ backend : %(backend)s # as list of string colorspecs: # single letter, long name, or # web-style hex +#axes.linestyle_cycle: - # linestyle cycle for plot lines as a list + # of string linestyle specs. Currently set to + # a single element list of '-' for backwards + # compatibility. #axes.xmargin : 0 # x margin. See `axes.Axes.margins` #axes.ymargin : 0 # y margin See `axes.Axes.margins`