Source code for npplus.pyplotx.cbqcolors

# Copyright (c) 2016, David H. Munro
# All rights reserved.
# This is Open Source software, released under the BSD 2-clause license,
# see http://opensource.org/licenses/BSD-2-Clause for details.
"""Interface for proper use of ColorBrewer qualitative color sets."""

from matplotlib import rc
try:
    from matplotlib import cycler
    cyc_name = 'prop_cycle'
except ImportError:
    # matplotlib 1.4 and below

    def cycler(x, y):
        return y

    cyc_name = 'color_cycle'


[docs]class CBQ(object): """Container for ColorBrewer qualitative color sets. These are good choices for line color cycles, in addition to maps meant to distinguish twelve or fewer different regions. Only the first three set2 and dark2 colors and the first four paired colors are colorblind safe. Mostly these sets are distinguished by hue, with the colors in a set similar lightness and saturation:: set1, pastel1 9 colors set2, pastel2, dark2 8 colors set3 12 colors accent 8 colors paired 12 colors set1 darkest, most saturated dark2 next darkest, less saturated accent 4 lighter colors followed by 4 darker colors set2 more uniform about same darkness as lighter accent colors set3 intermediate between darker and more pastel sets pastel1 more variable lightness, more saturated than pastel2 pastel2 lightest, least saturated paired[0::2] are pastel corresponding to darker paired[1::2] pastels are about at set3 lightness, darks about at set1 The yellow color in set1, pastel1, set3, accent, and paired is not visible against white. All other colors contrast with both white and black. The following modified sets omit the yellow color:: set1ny, pastel1ny 8 colors set3ny 11 colors accentny 7 colors Do not use the final pair in paired, that is use only paired[0:10], to avoid the yellow (which is paired[10]). """ set1 = ('#E41A1C', '#377EB8', '#4DAF4A', '#984EA3', '#FF7F00', '#FFFF33', '#A65628', '#F781BF', '#999999') pastel1 = ('#FBB4AE', '#B3CDE3', '#CCEBC5', '#DECBE4', '#FED9A6', '#FFFFCC', '#E5D8BD', '#FDDAEC', '#F2F2F2') set2 = ('#66C2A5', '#FC8D62', '#8DA0CB', '#E78AC3', '#A6D854', '#FFD92F', '#E5C494', '#B3B3B3') pastel2 = ('#B3E2CD', '#FDCDAC', '#CBD5E8', '#F4CAE4', '#E6F5C9', '#FFF2AE', '#F1E2CC', '#CCCCCC') dark2 = ('#1B9E77', '#D95F02', '#7570B3', '#E7298A', '#66A61E', '#E6AB02', '#A6761D', '#666666') set3 = ('#8DD3C7', '#FFFFB3', '#BEBADA', '#FB8072', '#80B1D3', '#FDB462', '#B3DE69', '#FCCDE5', '#D9D9D9', '#BC80BD', '#CCEBC5', '#FFED6F') accent = ('#7FC97F', '#BEAED4', '#FDC086', '#FFFF99', '#386CB0', '#F0027F', '#BF5B17', '#666666') paired = ('#A6CEE3', '#1F78B4', '#B2DF8A', '#33A02C', '#FB9A99', '#E31A1C', '#FDBF6F', '#FF7F00', '#CAB2D6', '#6A3D9A', '#FFFF99', '#B15928') # The yellows in set1, pastel1, set3, and accent are not visible against # a white background. Remove them. # Reorder to roughly match matplotlib default bgrcmyk cycle. set1ny = ('#377EB8', '#4DAF4A', '#E41A1C', '#999999', '#984EA3', '#FF7F00', '#A65628', '#F781BF') pastel1ny = ('#B3CDE3', '#CCEBC5', '#FBB4AE', '#F2F2F2', '#DECBE4', '#FED9A6', '#E5D8BD', '#FDDAEC') set3ny = ('#80B1D3', '#B3DE69', '#FB8072', '#8DD3C7', '#BC80BD', '#FFED6F', '#D9D9D9', '#FCCDE5', '#BEBADA', '#FDB462', '#CCEBC5') accentny = ('#386CB0', '#7FC97F', '#F0027F', '#BF5B17', '#BEAED4', '#FDC086', '#666666')
[docs] @classmethod def set_color_cycle(cls, name, axes=None): """Set the color cycle for future plot commands. Parameters ---------- name : str One of the color set names, see help(CBQ). axes : Axes, optional If not provided, sets the default color cycle in the rcParams axes section. Otherwise, sets the color cycle for the given axes. """ rc('axes', **{cyc_name: cycler('color', getattr(cls, name))})