From 684dbf6adb1357e62760471a8d072b01dce7ad35 Mon Sep 17 00:00:00 2001 From: Michael Droettboom Date: Mon, 11 Apr 2016 16:38:19 -0400 Subject: [PATCH 1/8] Fix #5577, Fix #5489: Color cycle handling --- .../specialty_plots/advanced_hillshading.py | 8 +++---- .../topographic_hillshading.py | 5 ++-- lib/matplotlib/colors.py | 23 ++++++++----------- 3 files changed, 17 insertions(+), 19 deletions(-) diff --git a/examples/specialty_plots/advanced_hillshading.py b/examples/specialty_plots/advanced_hillshading.py index 3d6af635e611..bbfd71c35aec 100644 --- a/examples/specialty_plots/advanced_hillshading.py +++ b/examples/specialty_plots/advanced_hillshading.py @@ -16,7 +16,7 @@ def display_colorbar(): rgb = ls.shade(z, cmap) fig, ax = plt.subplots() - ax.imshow(rgb) + ax.imshow(rgb, interpolation="bilinear") # Use a proxy artist for the colorbar... im = ax.imshow(z, cmap=cmap) @@ -39,11 +39,11 @@ def avoid_outliers(): fig, (ax1, ax2) = plt.subplots(ncols=2, figsize=(8, 4.5)) rgb = ls.shade(z, plt.cm.copper) - ax1.imshow(rgb) + ax1.imshow(rgb, interpolation="bilinear") ax1.set_title('Full range of data') rgb = ls.shade(z, plt.cm.copper, vmin=-10, vmax=10) - ax2.imshow(rgb) + ax2.imshow(rgb, interpolation="bilinear") ax2.set_title('Manually set range') fig.suptitle('Avoiding Outliers in Shaded Plots', size='x-large') @@ -62,7 +62,7 @@ def shade_other_data(): rgb = ls.shade_rgb(cmap(norm(z2)), z1) fig, ax = plt.subplots() - ax.imshow(rgb) + ax.imshow(rgb, interpolation="bilinear") ax.set_title('Shade by one variable, color by another', size='x-large') display_colorbar() diff --git a/examples/specialty_plots/topographic_hillshading.py b/examples/specialty_plots/topographic_hillshading.py index 751ea6fe93c7..83502599c593 100644 --- a/examples/specialty_plots/topographic_hillshading.py +++ b/examples/specialty_plots/topographic_hillshading.py @@ -44,13 +44,14 @@ # Vary vertical exaggeration and blend mode and plot all combinations for col, ve in zip(axes.T, [0.1, 1, 10]): # Show the hillshade intensity image in the first row - col[0].imshow(ls.hillshade(z, vert_exag=ve, dx=dx, dy=dy), cmap='gray') + col[0].imshow(ls.hillshade(z, vert_exag=ve, dx=dx, dy=dy), cmap='gray', + interpolation="bilinear") # Place hillshaded plots with different blend modes in the rest of the rows for ax, mode in zip(col[1:], ['hsv', 'overlay', 'soft']): rgb = ls.shade(z, cmap=cmap, blend_mode=mode, vert_exag=ve, dx=dx, dy=dy) - ax.imshow(rgb) + ax.imshow(rgb, interpolation="bilinear") # Label rows and columns for ax, ve in zip(axes[0], [0.1, 1, 10]): diff --git a/lib/matplotlib/colors.py b/lib/matplotlib/colors.py index 86011f06c23f..f95f29399595 100644 --- a/lib/matplotlib/colors.py +++ b/lib/matplotlib/colors.py @@ -1425,9 +1425,6 @@ class LightSource(object): clockwise from north and elevation up from the zero plane of the surface. The :meth:`shade` is used to produce "shaded" rgb values for a data array. - :meth:`shade_rgb` can be used to combine an rgb image with - The :meth:`shade_rgb` - The :meth:`hillshade` produces an illumination map of a surface. """ def __init__(self, azdeg=315, altdeg=45, hsv_min_val=0, hsv_max_val=1, hsv_min_sat=1, hsv_max_sat=0): @@ -1609,7 +1606,7 @@ def shade(self, data, cmap, norm=None, blend_mode='overlay', vmin=None, rgb0[..., :3] = rgb1[..., :3] return rgb0 - def shade_rgb(self, rgb, elevation, fraction=1., blend_mode='hsv', + def shade_rgb(self, rgb, elevation, fraction=1., blend_mode='overlay', vert_exag=1, dx=1, dy=1, **kwargs): """ Take the input RGB array (ny*nx*3) adjust their color values @@ -1631,15 +1628,15 @@ def shade_rgb(self, rgb, elevation, fraction=1., blend_mode='hsv', beyond 0 or 1). Note that this is not visually or mathematically the same as vertical exaggeration. blend_mode : {'hsv', 'overlay', 'soft'} or callable, optional - The type of blending used to combine the colormapped data values - with the illumination intensity. For backwards compatibility, this - defaults to "hsv". Note that for most topographic surfaces, - "overlay" or "soft" appear more visually realistic. If a - user-defined function is supplied, it is expected to combine an - MxNx3 RGB array of floats (ranging 0 to 1) with an MxNx1 hillshade - array (also 0 to 1). (Call signature `func(rgb, illum, **kwargs)`) - Additional kwargs supplied to this function will be passed on to - the *blend_mode* function. + The type of blending used to combine the colormapped data + values with the illumination intensity. Note that for + most topographic surfaces, "overlay" or "soft" appear more + visually realistic. If a user-defined function is + supplied, it is expected to combine an MxNx3 RGB array of + floats (ranging 0 to 1) with an MxNx1 hillshade array + (also 0 to 1). (Call signature `func(rgb, illum, + **kwargs)`) Additional kwargs supplied to this function + will be passed on to the *blend_mode* function. vert_exag : number, optional The amount to exaggerate the elevation values by when calculating illumination. This can be used either to correct for differences in From 48d5b6b8fea7b70c49e5a7400c2c4fa5841bdd36 Mon Sep 17 00:00:00 2001 From: Michael Droettboom Date: Mon, 11 Apr 2016 17:43:02 -0400 Subject: [PATCH 2/8] Fix #5990. Scatter follows color cycle --- examples/pylab_examples/color_demo.py | 7 +- .../specialty_plots/advanced_hillshading.py | 8 +- .../topographic_hillshading.py | 5 +- lib/matplotlib/axes/_axes.py | 50 ++++++++---- lib/matplotlib/axes/_base.py | 20 ++++- lib/matplotlib/colors.py | 73 +++++++++++++++--- lib/matplotlib/rcsetup.py | 17 ++-- lib/matplotlib/sankey.py | 14 ++-- lib/matplotlib/stackplot.py | 10 +-- lib/matplotlib/streamplot.py | 4 +- .../test_cycles/lineprop_cycle_basic.png | Bin 35049 -> 41852 bytes lib/mpl_toolkits/mplot3d/axes3d.py | 16 +++- matplotlibrc.template | 12 +-- 13 files changed, 168 insertions(+), 68 deletions(-) diff --git a/examples/pylab_examples/color_demo.py b/examples/pylab_examples/color_demo.py index 1d471b0086a9..3ccf07a2e1a2 100755 --- a/examples/pylab_examples/color_demo.py +++ b/examples/pylab_examples/color_demo.py @@ -11,6 +11,9 @@ 4) as a string representing a floating point number from 0 to 1, corresponding to shades of gray. + 5) as a special color "Cn", where n is a number 0-9 specifying the + nth color in the currently active color cycle. + See help(colors) for more info. """ import matplotlib.pyplot as plt @@ -20,8 +23,8 @@ #subplot(111, facecolor='#ababab') t = np.arange(0.0, 2.0, 0.01) s = np.sin(2*np.pi*t) -plt.plot(t, s, 'y') -plt.xlabel('time (s)', color='r') +plt.plot(t, s, 'C0') +plt.xlabel('time (s)', color='C0') plt.ylabel('voltage (mV)', color='0.5') # grayscale color plt.title('About as silly as it gets, folks', color='#afeeee') plt.show() diff --git a/examples/specialty_plots/advanced_hillshading.py b/examples/specialty_plots/advanced_hillshading.py index bbfd71c35aec..3d6af635e611 100644 --- a/examples/specialty_plots/advanced_hillshading.py +++ b/examples/specialty_plots/advanced_hillshading.py @@ -16,7 +16,7 @@ def display_colorbar(): rgb = ls.shade(z, cmap) fig, ax = plt.subplots() - ax.imshow(rgb, interpolation="bilinear") + ax.imshow(rgb) # Use a proxy artist for the colorbar... im = ax.imshow(z, cmap=cmap) @@ -39,11 +39,11 @@ def avoid_outliers(): fig, (ax1, ax2) = plt.subplots(ncols=2, figsize=(8, 4.5)) rgb = ls.shade(z, plt.cm.copper) - ax1.imshow(rgb, interpolation="bilinear") + ax1.imshow(rgb) ax1.set_title('Full range of data') rgb = ls.shade(z, plt.cm.copper, vmin=-10, vmax=10) - ax2.imshow(rgb, interpolation="bilinear") + ax2.imshow(rgb) ax2.set_title('Manually set range') fig.suptitle('Avoiding Outliers in Shaded Plots', size='x-large') @@ -62,7 +62,7 @@ def shade_other_data(): rgb = ls.shade_rgb(cmap(norm(z2)), z1) fig, ax = plt.subplots() - ax.imshow(rgb, interpolation="bilinear") + ax.imshow(rgb) ax.set_title('Shade by one variable, color by another', size='x-large') display_colorbar() diff --git a/examples/specialty_plots/topographic_hillshading.py b/examples/specialty_plots/topographic_hillshading.py index 83502599c593..751ea6fe93c7 100644 --- a/examples/specialty_plots/topographic_hillshading.py +++ b/examples/specialty_plots/topographic_hillshading.py @@ -44,14 +44,13 @@ # Vary vertical exaggeration and blend mode and plot all combinations for col, ve in zip(axes.T, [0.1, 1, 10]): # Show the hillshade intensity image in the first row - col[0].imshow(ls.hillshade(z, vert_exag=ve, dx=dx, dy=dy), cmap='gray', - interpolation="bilinear") + col[0].imshow(ls.hillshade(z, vert_exag=ve, dx=dx, dy=dy), cmap='gray') # Place hillshaded plots with different blend modes in the rest of the rows for ax, mode in zip(col[1:], ['hsv', 'overlay', 'soft']): rgb = ls.shade(z, cmap=cmap, blend_mode=mode, vert_exag=ve, dx=dx, dy=dy) - ax.imshow(rgb, interpolation="bilinear") + ax.imshow(rgb) # Label rows and columns for ax, ve in zip(axes[0], [0.1, 1, 10]): diff --git a/lib/matplotlib/axes/_axes.py b/lib/matplotlib/axes/_axes.py index 3ea8f26dcd61..184186fe738d 100644 --- a/lib/matplotlib/axes/_axes.py +++ b/lib/matplotlib/axes/_axes.py @@ -4,6 +4,7 @@ from matplotlib.externals import six from matplotlib.externals.six.moves import reduce, xrange, zip, zip_longest +import itertools import math import warnings @@ -2458,7 +2459,7 @@ def pie(self, x, explode=None, labels=None, colors=None, Call signature:: pie(x, explode=None, labels=None, - colors=('b', 'g', 'r', 'c', 'm', 'y', 'k', 'w'), + colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=None, radius=None, counterclock=True, wedgeprops=None, textprops=None, @@ -2478,7 +2479,8 @@ def pie(self, x, explode=None, labels=None, colors=None, *colors*: [ *None* | color sequence ] A sequence of matplotlib color args through which the pie chart - will cycle. + will cycle. If `None`, will use the colors in the currently + active cycle. *labels*: [ *None* | len(x) sequence of strings ] A sequence of strings providing the labels for each wedge @@ -2567,7 +2569,11 @@ def pie(self, x, explode=None, labels=None, colors=None, if len(x) != len(explode): raise ValueError("'explode' must be of length 'x'") if colors is None: - colors = ('b', 'g', 'r', 'c', 'm', 'y', 'k', 'w') + get_next_color = self._get_patches_for_fill.get_next_color + else: + color_cycle = itertools.cycle(colors) + def get_next_color(): + return six.next(color_cycle) if radius is None: radius = 1 @@ -2603,7 +2609,7 @@ def pie(self, x, explode=None, labels=None, colors=None, w = mpatches.Wedge((x, y), radius, 360. * min(theta1, theta2), 360. * max(theta1, theta2), - facecolor=colors[i % len(colors)], + facecolor=get_next_color(), **wedgeprops) slices.append(w) self.add_patch(w) @@ -3023,8 +3029,8 @@ def xywhere(xs, ys, mask): l0, = self.plot(x, y, fmt, label='_nolegend_', **kwargs) if ecolor is None: - if l0 is None and 'color' in self._get_lines._prop_keys: - ecolor = next(self._get_lines.prop_cycler)['color'] + if l0 is None: + ecolor = self._get_lines.get_next_color() else: ecolor = l0.get_color() @@ -3846,7 +3852,10 @@ def scatter(self, x, y, s=None, c=None, marker='o', cmap=None, norm=None, if facecolors is not None: c = facecolors else: - c = 'b' # The original default + if rcParams['_internal.classic_mode']: + c = 'b' # The original default + else: + c = self._get_patches_for_fill.get_next_color() if edgecolors is None and not rcParams['_internal.classic_mode']: edgecolors = 'face' @@ -6019,9 +6028,8 @@ def _normalize_input(inp, ename='input'): raise ValueError( 'weights should have the same shape as x') - if color is None and 'color' in self._get_lines._prop_keys: - color = [next(self._get_lines.prop_cycler)['color'] - for i in xrange(nx)] + if color is None: + color = [self._get_lines.get_next_color() for i in xrange(nx)] else: color = mcolors.colorConverter.to_rgba_array(color) if len(color) != nx: @@ -7507,6 +7515,12 @@ def violin(self, vpstats, positions=None, vert=True, widths=0.5, perp_lines = self.vlines par_lines = self.hlines + if rcParams['_internal.classic_mode']: + fillcolor = 'y' + edgecolor = 'r' + else: + fillcolor = edgecolor = self._get_lines.get_next_color() + # Render violins bodies = [] for stats, pos, width in zip(vpstats, positions, widths): @@ -7517,7 +7531,7 @@ def violin(self, vpstats, positions=None, vert=True, widths=0.5, bodies += [fill(stats['coords'], -vals + pos, vals + pos, - facecolor='y', + facecolor=fillcolor, alpha=0.3)] means.append(stats['mean']) mins.append(stats['min']) @@ -7527,20 +7541,24 @@ def violin(self, vpstats, positions=None, vert=True, widths=0.5, # Render means if showmeans: - artists['cmeans'] = perp_lines(means, pmins, pmaxes, colors='r') + artists['cmeans'] = perp_lines(means, pmins, pmaxes, + colors=edgecolor) # Render extrema if showextrema: - artists['cmaxes'] = perp_lines(maxes, pmins, pmaxes, colors='r') - artists['cmins'] = perp_lines(mins, pmins, pmaxes, colors='r') - artists['cbars'] = par_lines(positions, mins, maxes, colors='r') + artists['cmaxes'] = perp_lines(maxes, pmins, pmaxes, + colors=edgecolor) + artists['cmins'] = perp_lines(mins, pmins, pmaxes, + colors=edgecolor) + artists['cbars'] = par_lines(positions, mins, maxes, + colors=edgecolor) # Render medians if showmedians: artists['cmedians'] = perp_lines(medians, pmins, pmaxes, - colors='r') + colors=edgecolor) return artists diff --git a/lib/matplotlib/axes/_base.py b/lib/matplotlib/axes/_base.py index c11bb9c3af33..79084dc377da 100644 --- a/lib/matplotlib/axes/_base.py +++ b/lib/matplotlib/axes/_base.py @@ -52,6 +52,7 @@ def _process_plot_format(fmt): * 'ko': black circles * '.b': blue dots * 'r--': red dashed lines + * 'C2--': the third color in the color cycle, dashed lines .. seealso:: @@ -97,7 +98,9 @@ def _process_plot_format(fmt): chars = [c for c in fmt] - for c in chars: + i = 0 + while i < len(chars): + c = chars[i] if c in mlines.lineStyles: if linestyle is not None: raise ValueError( @@ -113,9 +116,14 @@ def _process_plot_format(fmt): raise ValueError( 'Illegal format string "%s"; two color symbols' % fmt) color = c + elif c == 'C' and i < len(chars) - 1: + color_cycle_number = int(chars[i + 1]) + color = mcolors.colorConverter._get_nth_color(color_cycle_number) + i += 1 else: raise ValueError( 'Unrecognized character %c in format string' % c) + i += 1 if linestyle is None and marker is None: linestyle = rcParams['lines.linestyle'] @@ -161,6 +169,10 @@ def set_prop_cycle(self, *args, **kwargs): else: prop_cycler = cycler(*args, **kwargs) + # Make sure the cycler always has at least one color + if 'color' not in prop_cycler.keys: + prop_cycler = prop_cycler * cycler('color', ['k']) + self.prop_cycler = itertools.cycle(prop_cycler) # This should make a copy self._prop_keys = prop_cycler.keys @@ -186,6 +198,12 @@ def __call__(self, *args, **kwargs): ret = self._grab_next_args(*args, **kwargs) return ret + def get_next_color(self): + """ + Return the next color in the cycle. + """ + return six.next(self.prop_cycler)['color'] + def set_lineprops(self, line, **kwargs): assert self.command == 'plot', 'set_lineprops only works with "plot"' line.set(**kwargs) diff --git a/lib/matplotlib/colors.py b/lib/matplotlib/colors.py index f95f29399595..a7349dcd55a4 100644 --- a/lib/matplotlib/colors.py +++ b/lib/matplotlib/colors.py @@ -31,6 +31,12 @@ - k: black - w: white +To use the colors that are part of the active color cycle in the current style, +use `C` followed by a digit. For example: + + - `C0`: The first color in the cycle + - `C1`: The second color in the cycle + Gray shades can be given as a string encoding a float in the 0-1 range, e.g.:: color = '0.75' @@ -67,6 +73,19 @@ def is_color_like(c): 'Return *True* if *c* can be converted to *RGB*' + + # Special-case the N-th color cycle syntax, because it's parsing + # needs to be deferred. We may be reading a value from rcParams + # here before the color_cycle rcParam has been parsed. + if isinstance(c, bytes): + match = re.match(b'^C[0-9]$', c) + if match is not None: + return True + elif isinstance(c, six.text_type): + match = re.match('^C[0-9]$', c) + if match is not None: + return True + try: colorConverter.to_rgb(c) return True @@ -114,9 +133,36 @@ class ColorConverter(object): 'k': (0, 0, 0), 'w': (1, 1, 1)} + _prop_cycler = None + cache = {} CN_LOOKUPS = [COLOR_NAMES[k] for k in ['css4', 'xkcd']] + @classmethod + def _get_nth_color(cls, val): + """ + Get the Nth color in the current color cycle. If N is greater + than the number of colors in the cycle, it is wrapped around. + """ + from matplotlib.rcsetup import cycler + from matplotlib import rcParams + + prop_cycler = rcParams['axes.prop_cycle'] + if prop_cycler is None and 'axes.color_cycle' in rcParams: + clist = rcParams['axes.color_cycle'] + prop_cycler = cycler('color', clist) + + colors = prop_cycler._transpose()['color'] + return colors[val % len(colors)] + + @classmethod + def _parse_nth_color(cls, val): + match = re.match('^C[0-9]$', val) + if match is not None: + return cls._get_nth_color(int(val[1])) + + raise ValueError("Not a color cycle color") + def to_rgb(self, arg): """ Returns an *RGB* tuple of three floats from 0-1. @@ -154,6 +200,10 @@ def to_rgb(self, arg): argl = arg.lower() color = self.colors.get(argl, None) if color is None: + try: + argl = self._parse_nth_color(arg) + except ValueError: + pass for cmapping in self.CN_LOOKUPS: str1 = cmapping.get(argl, argl) if str1 != argl: @@ -1425,6 +1475,9 @@ class LightSource(object): clockwise from north and elevation up from the zero plane of the surface. The :meth:`shade` is used to produce "shaded" rgb values for a data array. + :meth:`shade_rgb` can be used to combine an rgb image with + The :meth:`shade_rgb` + The :meth:`hillshade` produces an illumination map of a surface. """ def __init__(self, azdeg=315, altdeg=45, hsv_min_val=0, hsv_max_val=1, hsv_min_sat=1, hsv_max_sat=0): @@ -1606,7 +1659,7 @@ def shade(self, data, cmap, norm=None, blend_mode='overlay', vmin=None, rgb0[..., :3] = rgb1[..., :3] return rgb0 - def shade_rgb(self, rgb, elevation, fraction=1., blend_mode='overlay', + def shade_rgb(self, rgb, elevation, fraction=1., blend_mode='hsv', vert_exag=1, dx=1, dy=1, **kwargs): """ Take the input RGB array (ny*nx*3) adjust their color values @@ -1628,15 +1681,15 @@ def shade_rgb(self, rgb, elevation, fraction=1., blend_mode='overlay', beyond 0 or 1). Note that this is not visually or mathematically the same as vertical exaggeration. blend_mode : {'hsv', 'overlay', 'soft'} or callable, optional - The type of blending used to combine the colormapped data - values with the illumination intensity. Note that for - most topographic surfaces, "overlay" or "soft" appear more - visually realistic. If a user-defined function is - supplied, it is expected to combine an MxNx3 RGB array of - floats (ranging 0 to 1) with an MxNx1 hillshade array - (also 0 to 1). (Call signature `func(rgb, illum, - **kwargs)`) Additional kwargs supplied to this function - will be passed on to the *blend_mode* function. + The type of blending used to combine the colormapped data values + with the illumination intensity. For backwards compatibility, this + defaults to "hsv". Note that for most topographic surfaces, + "overlay" or "soft" appear more visually realistic. If a + user-defined function is supplied, it is expected to combine an + MxNx3 RGB array of floats (ranging 0 to 1) with an MxNx1 hillshade + array (also 0 to 1). (Call signature `func(rgb, illum, **kwargs)`) + Additional kwargs supplied to this function will be passed on to + the *blend_mode* function. vert_exag : number, optional The amount to exaggerate the elevation values by when calculating illumination. This can be used either to correct for differences in diff --git a/lib/matplotlib/rcsetup.py b/lib/matplotlib/rcsetup.py index 9e46fefcbd3e..5a681d156162 100644 --- a/lib/matplotlib/rcsetup.py +++ b/lib/matplotlib/rcsetup.py @@ -848,7 +848,7 @@ def validate_animation_writer_path(p): # line props 'lines.linewidth': [2.5, validate_float], # line width in points 'lines.linestyle': ['-', six.text_type], # solid line - 'lines.color': ['b', validate_color], # blue + 'lines.color': ['C0', validate_color], # blue 'lines.marker': ['None', six.text_type], # black 'lines.markeredgewidth': [1.0, validate_float], 'lines.markersize': [6, validate_float], # markersize, in points @@ -867,7 +867,7 @@ def validate_animation_writer_path(p): ## patch props 'patch.linewidth': [None, validate_float_or_None], # line width in points 'patch.edgecolor': ['k', validate_color], # black - 'patch.facecolor': ['#1f77b4', validate_color], # blue (first color in color cycle) + 'patch.facecolor': ['C0', validate_color], # blue (first color in color cycle) 'patch.antialiased': [True, validate_bool], # antialiased (no jaggies) ## Histogram properties @@ -885,7 +885,7 @@ def validate_animation_writer_path(p): 'boxplot.showfliers': [True, validate_bool], 'boxplot.meanline': [False, validate_bool], - 'boxplot.flierprops.color': ['b', validate_color], + 'boxplot.flierprops.color': ['C0', validate_color], 'boxplot.flierprops.marker': ['+', six.text_type], 'boxplot.flierprops.markerfacecolor': ['auto', validate_color_or_auto], 'boxplot.flierprops.markeredgecolor': ['k', validate_color], @@ -893,11 +893,11 @@ def validate_animation_writer_path(p): 'boxplot.flierprops.linestyle': ['none', six.text_type], 'boxplot.flierprops.linewidth': [1.0, validate_float], - 'boxplot.boxprops.color': ['b', validate_color], + 'boxplot.boxprops.color': ['C0', validate_color], 'boxplot.boxprops.linewidth': [1.0, validate_float], 'boxplot.boxprops.linestyle': ['-', six.text_type], - 'boxplot.whiskerprops.color': ['b', validate_color], + 'boxplot.whiskerprops.color': ['C0', validate_color], 'boxplot.whiskerprops.linewidth': [1.0, validate_float], 'boxplot.whiskerprops.linestyle': ['--', six.text_type], @@ -905,7 +905,7 @@ def validate_animation_writer_path(p): 'boxplot.capprops.linewidth': [1.0, validate_float], 'boxplot.capprops.linestyle': ['-', six.text_type], - 'boxplot.medianprops.color': ['r', validate_color], + 'boxplot.medianprops.color': ['C1', validate_color], 'boxplot.medianprops.linewidth': [1.0, validate_float], 'boxplot.medianprops.linestyle': ['-', six.text_type], @@ -1016,7 +1016,10 @@ def validate_animation_writer_path(p): 'axes.formatter.use_mathtext': [False, validate_bool], 'axes.formatter.useoffset': [True, validate_bool], 'axes.unicode_minus': [True, validate_bool], - 'axes.color_cycle': [['b', 'g', 'r', 'c', 'm', 'y', 'k'], + 'axes.color_cycle': [ + ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', + '#9467bd', '#8c564b', '#e377c2', '#7f7f7f', + '#bcbd22', '#17becf'], deprecate_axes_colorcycle], # cycle of plot # line colors # This entry can be either a cycler object or a diff --git a/lib/matplotlib/sankey.py b/lib/matplotlib/sankey.py index 423884723461..a081cb112d50 100755 --- a/lib/matplotlib/sankey.py +++ b/lib/matplotlib/sankey.py @@ -770,11 +770,15 @@ def _get_angle(a, r): print("lrpath\n", self._revert(lrpath)) xs, ys = list(zip(*vertices)) self.ax.plot(xs, ys, 'go-') - patch = PathPatch(Path(vertices, codes), - fc=kwargs.pop('fc', kwargs.pop('facecolor', - '#bfd1d4')), # Custom defaults - lw=kwargs.pop('lw', kwargs.pop('linewidth', 0.5)), - **kwargs) + if rcParams['_internal.classic_mode']: + fc = kwargs.pop('fc', kwargs.pop('facecolor', '#bfd1d4')) + lw = kwargs.pop('lw', kwargs.pop('linewidth', 0.5)) + else: + fc = kwargs.pop('fc', kwargs.pop('facecolor', None)) + lw = kwargs.pop('lw', kwargs.pop('linewidth', None)) + if fc is None: + fc = six.next(self.ax._get_patches_for_fill.prop_cycler)['color'] + patch = PathPatch(Path(vertices, codes), fc=fc, lw=lw, **kwargs) self.ax.add_patch(patch) # Add the path labels. diff --git a/lib/matplotlib/stackplot.py b/lib/matplotlib/stackplot.py index 8a34f97c389a..e44885953373 100644 --- a/lib/matplotlib/stackplot.py +++ b/lib/matplotlib/stackplot.py @@ -108,10 +108,7 @@ def stackplot(axes, x, *args, **kwargs): raise ValueError(errstr) # Color between x = 0 and the first array. - if 'color' in axes._get_lines._prop_keys: - color = six.next(axes._get_lines.prop_cycler)['color'] - else: - color = None + color = axes._get_lines.get_next_color() r.append(axes.fill_between(x, first_line, stack[0, :], facecolor=color, label= six.next(labels, None), @@ -120,10 +117,7 @@ def stackplot(axes, x, *args, **kwargs): # Color between array i-1 and array i for i in xrange(len(y) - 1): - if 'color' in axes._get_lines._prop_keys: - color = six.next(axes._get_lines.prop_cycler)['color'] - else: - color = None + color = axes._get_lines.get_next_color() r.append(axes.fill_between(x, stack[i, :], stack[i + 1, :], facecolor=color, label= six.next(labels, None), diff --git a/lib/matplotlib/streamplot.py b/lib/matplotlib/streamplot.py index 64db899104d2..51409fad6828 100644 --- a/lib/matplotlib/streamplot.py +++ b/lib/matplotlib/streamplot.py @@ -82,8 +82,8 @@ def streamplot(axes, x, y, u, v, density=1, linewidth=None, color=None, if transform is None: transform = axes.transData - if color is None and 'color' in axes._get_lines._prop_keys: - color = six.next(axes._get_lines.prop_cycler)['color'] + if color is None: + color = axes._get_lines.get_next_color() if linewidth is None: linewidth = matplotlib.rcParams['lines.linewidth'] diff --git a/lib/matplotlib/tests/baseline_images/test_cycles/lineprop_cycle_basic.png b/lib/matplotlib/tests/baseline_images/test_cycles/lineprop_cycle_basic.png index e3706c3216f27cc2bb483b53d0ac894a01b2bbb0..2d20423df44d54c53dcbb0593a83772e92d9d611 100644 GIT binary patch literal 41852 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 z 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 Hy@3A%qY+CK diff --git a/lib/mpl_toolkits/mplot3d/axes3d.py b/lib/mpl_toolkits/mplot3d/axes3d.py index 1e2fc5b19829..283c17c6ea4d 100755 --- a/lib/mpl_toolkits/mplot3d/axes3d.py +++ b/lib/mpl_toolkits/mplot3d/axes3d.py @@ -1593,7 +1593,10 @@ def plot_surface(self, X, Y, Z, *args, **kwargs): if 'facecolors' in kwargs: fcolors = kwargs.pop('facecolors') else: - color = np.array(colorConverter.to_rgba(kwargs.pop('color', 'b'))) + color = kwargs.pop('color', None) + if color is None: + color = self._get_lines.get_next_color() + color = np.array(colorConverter.to_rgba(color)) fcolors = None cmap = kwargs.get('cmap', None) @@ -1862,7 +1865,10 @@ def plot_trisurf(self, *args, **kwargs): had_data = self.has_data() # TODO: Support custom face colours - color = np.array(colorConverter.to_rgba(kwargs.pop('color', 'b'))) + color = kwargs.pop('color', None) + if color is None: + color = self._get_lines.get_next_color() + color = np.array(colorConverter.to_rgba(color)) cmap = kwargs.get('cmap', None) norm = kwargs.pop('norm', None) @@ -2211,7 +2217,7 @@ def add_collection3d(self, col, zs=0, zdir='z'): Axes.add_collection(self, col) - def scatter(self, xs, ys, zs=0, zdir='z', s=20, c='b', depthshade=True, + def scatter(self, xs, ys, zs=0, zdir='z', s=20, c=None, depthshade=True, *args, **kwargs): ''' Create a scatter plot. @@ -2264,6 +2270,8 @@ def scatter(self, xs, ys, zs=0, zdir='z', s=20, c='b', depthshade=True, s = np.ma.ravel(s) # This doesn't have to match x, y in size. + if c is None: + c = self._get_lines.get_next_color() cstr = cbook.is_string_like(c) or cbook.is_sequence_of_strings(c) if not cstr: c = np.asanyarray(c) @@ -2342,7 +2350,7 @@ def bar(self, left, height, zs=0, zdir='z', *args, **kwargs): return patches - def bar3d(self, x, y, z, dx, dy, dz, color='b', + def bar3d(self, x, y, z, dx, dy, dz, color=None, zsort='average', *args, **kwargs): ''' Generate a 3D bar, or multiple bars. diff --git a/matplotlibrc.template b/matplotlibrc.template index ed220657175d..1ddb3fcd0dd2 100644 --- a/matplotlibrc.template +++ b/matplotlibrc.template @@ -80,7 +80,7 @@ backend : $TEMPLATE_BACKEND # information on line properties. #lines.linewidth : 2.0 # line width in points #lines.linestyle : - # solid line -#lines.color : blue # has no affect on plot(); see axes.prop_cycle +#lines.color : C0 # has no affect on plot(); see axes.prop_cycle #lines.marker : None # the default marker #lines.markeredgewidth : 1.0 # the line width around the marker symbol #lines.markersize : 6 # markersize, in points @@ -105,7 +105,7 @@ backend : $TEMPLATE_BACKEND #patch.linewidth : None # edge width in points. # If None, use axes.linewidth when patch # is not filled. -#patch.facecolor : 1f77b4 +#patch.facecolor : C0 #patch.edgecolor : black #patch.antialiased : True # render patches in antialiased (no jaggies) @@ -141,14 +141,14 @@ backend : $TEMPLATE_BACKEND #boxplot.capprops.linewidth : 1.0 #boxplot.capprops.linestyle : '-' -#boxplot.medianprops.color : 'b' +#boxplot.medianprops.color : 'C0' #boxplot.medianprops.linewidth : 1.0 #boxplot.medianprops.linestyle : '-' -#boxplot.meanprops.color : 'b' +#boxplot.meanprops.color : 'C1' #boxplot.meanprops.marker : '^' -#boxplot.meanprops.markerfacecolor : 'b' -#boxplot.meanprops.markeredgecolor : 'b' +#boxplot.meanprops.markerfacecolor : 'C1' +#boxplot.meanprops.markeredgecolor : 'C1' #boxplot.meanprops.markersize : 6 #boxplot.meanprops.linestyle : 'none' #boxplot.meanprops.linewidth : 1.0 From 649722afa5c76096f5f6473415d3a5490fefe148 Mon Sep 17 00:00:00 2001 From: Michael Droettboom Date: Mon, 11 Apr 2016 18:56:09 -0400 Subject: [PATCH 3/8] Fix number --- examples/pylab_examples/color_demo.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/pylab_examples/color_demo.py b/examples/pylab_examples/color_demo.py index 3ccf07a2e1a2..af632b93b2e2 100755 --- a/examples/pylab_examples/color_demo.py +++ b/examples/pylab_examples/color_demo.py @@ -1,6 +1,6 @@ #!/usr/bin/env python """ -matplotlib gives you 4 ways to specify colors, +matplotlib gives you 5 ways to specify colors, 1) as a single letter string, ala MATLAB From 3427fa7f38b83c7125ea7e1b8b0209794db3942e Mon Sep 17 00:00:00 2001 From: Michael Droettboom Date: Mon, 11 Apr 2016 18:57:27 -0400 Subject: [PATCH 4/8] Change color used in example --- examples/pylab_examples/color_demo.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/pylab_examples/color_demo.py b/examples/pylab_examples/color_demo.py index af632b93b2e2..f67569ac9f22 100755 --- a/examples/pylab_examples/color_demo.py +++ b/examples/pylab_examples/color_demo.py @@ -23,8 +23,8 @@ #subplot(111, facecolor='#ababab') t = np.arange(0.0, 2.0, 0.01) s = np.sin(2*np.pi*t) -plt.plot(t, s, 'C0') -plt.xlabel('time (s)', color='C0') +plt.plot(t, s, 'C1') +plt.xlabel('time (s)', color='C1') plt.ylabel('voltage (mV)', color='0.5') # grayscale color plt.title('About as silly as it gets, folks', color='#afeeee') plt.show() From 992a258b78bda11f7db653117dff3d165cf36bf3 Mon Sep 17 00:00:00 2001 From: Michael Droettboom Date: Mon, 11 Apr 2016 18:58:04 -0400 Subject: [PATCH 5/8] Fix typo --- lib/matplotlib/colors.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/matplotlib/colors.py b/lib/matplotlib/colors.py index a7349dcd55a4..c3555585838a 100644 --- a/lib/matplotlib/colors.py +++ b/lib/matplotlib/colors.py @@ -74,7 +74,7 @@ def is_color_like(c): 'Return *True* if *c* can be converted to *RGB*' - # Special-case the N-th color cycle syntax, because it's parsing + # Special-case the N-th color cycle syntax, because its parsing # needs to be deferred. We may be reading a value from rcParams # here before the color_cycle rcParam has been parsed. if isinstance(c, bytes): From 5626c401e0b0bb358229ceada324280de418241e Mon Sep 17 00:00:00 2001 From: Michael Droettboom Date: Mon, 11 Apr 2016 21:15:34 -0400 Subject: [PATCH 6/8] PEP8 --- lib/matplotlib/axes/_axes.py | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/matplotlib/axes/_axes.py b/lib/matplotlib/axes/_axes.py index 184186fe738d..0671a1a34385 100644 --- a/lib/matplotlib/axes/_axes.py +++ b/lib/matplotlib/axes/_axes.py @@ -2572,6 +2572,7 @@ def pie(self, x, explode=None, labels=None, colors=None, get_next_color = self._get_patches_for_fill.get_next_color else: color_cycle = itertools.cycle(colors) + def get_next_color(): return six.next(color_cycle) From 17b71ea922c490e39e0cca7b1c3c3e64d1bd8edf Mon Sep 17 00:00:00 2001 From: Michael Droettboom Date: Mon, 11 Apr 2016 21:16:28 -0400 Subject: [PATCH 7/8] Fix Sankey example --- lib/matplotlib/sankey.py | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/matplotlib/sankey.py b/lib/matplotlib/sankey.py index a081cb112d50..41d3e04a308d 100755 --- a/lib/matplotlib/sankey.py +++ b/lib/matplotlib/sankey.py @@ -45,6 +45,7 @@ from matplotlib.transforms import Affine2D from matplotlib import verbose from matplotlib import docstring +from matplotlib import rcParams __author__ = "Kevin L. Davies" __credits__ = ["Yannick Copin"] From 58e66c820b036389510400af7f52338d05f08908 Mon Sep 17 00:00:00 2001 From: Michael Droettboom Date: Tue, 26 Apr 2016 10:15:59 -0400 Subject: [PATCH 8/8] Fix comments --- lib/matplotlib/rcsetup.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/matplotlib/rcsetup.py b/lib/matplotlib/rcsetup.py index 5a681d156162..6f34c402499e 100644 --- a/lib/matplotlib/rcsetup.py +++ b/lib/matplotlib/rcsetup.py @@ -848,7 +848,7 @@ def validate_animation_writer_path(p): # line props 'lines.linewidth': [2.5, validate_float], # line width in points 'lines.linestyle': ['-', six.text_type], # solid line - 'lines.color': ['C0', validate_color], # blue + 'lines.color': ['C0', validate_color], # first color in color cycle 'lines.marker': ['None', six.text_type], # black 'lines.markeredgewidth': [1.0, validate_float], 'lines.markersize': [6, validate_float], # markersize, in points @@ -867,7 +867,7 @@ def validate_animation_writer_path(p): ## patch props 'patch.linewidth': [None, validate_float_or_None], # line width in points 'patch.edgecolor': ['k', validate_color], # black - 'patch.facecolor': ['C0', validate_color], # blue (first color in color cycle) + 'patch.facecolor': ['C0', validate_color], # first color in color cycle 'patch.antialiased': [True, validate_bool], # antialiased (no jaggies) ## Histogram properties pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy