From 9957e82e434ca7f87a45daae4561fce97dd0688e Mon Sep 17 00:00:00 2001 From: Antony Lee Date: Tue, 30 Jul 2019 18:58:52 +0200 Subject: [PATCH] Get default params from matplotlibrc.template. This makes matplotlibrc.template a valid style file representing the default style (modulo things that styles do not control, such as the backend), avoids having to duplicate the defaults in rcsetup, removes the need to test that the default matplotlibrc is up to date (if not, matplotlib fails to import), and makes it easier to fit lines within 79 characters in rcsetup.py. The only tricky points are: - datapath is not really an rcparam anyways, so just hack `__getitem__` to always return the correct value. - the entry for path.effects was incorrect, as [] would be validated as the "[]" list which is not a valid list of patheffects. In fact this rcParam cannot be meaningfully set from matplotlibrc; one would need to do an eval() like for axes.prop_cycle but let's not get there... I changed the validator to validate_anylist, which at least works for the default of an empty list... - we need to be a bit more careful when constructing the global rcParams instance as well as rcParamsOrig, rcParamsDefault, to not resolve _auto_backend_sentinel too early. One can check that the rcParams are unchanged by printing them out -- that catches a typo: two entries in font.fantasy should be "Impact", "Western"; not "ImpactWestern". --- .flake8 | 1 - lib/matplotlib/__init__.py | 49 +- lib/matplotlib/cbook/__init__.py | 2 +- lib/matplotlib/rcsetup.py | 748 ++++++------- lib/matplotlib/tests/test_rcparams.py | 55 - matplotlibrc.template | 1486 ++++++++++++------------- 6 files changed, 1134 insertions(+), 1207 deletions(-) diff --git a/.flake8 b/.flake8 index 152895615a78..1896dbc40ff4 100644 --- a/.flake8 +++ b/.flake8 @@ -35,7 +35,6 @@ per-file-ignores = lib/matplotlib/_mathtext_data.py: E203, E261 lib/matplotlib/font_manager.py: E203, E221, E251, E501 lib/matplotlib/mathtext.py: E221, E251 - lib/matplotlib/rcsetup.py: E501 lib/matplotlib/tests/test_mathtext.py: E501 lib/matplotlib/transforms.py: E201, E202, E203 lib/matplotlib/tri/triinterpolate.py: E201, E221 diff --git a/lib/matplotlib/__init__.py b/lib/matplotlib/__init__.py index dbb77e4052ae..c3453bfac73f 100644 --- a/lib/matplotlib/__init__.py +++ b/lib/matplotlib/__init__.py @@ -139,7 +139,7 @@ from matplotlib.cbook import ( MatplotlibDeprecationWarning, dedent, get_label, sanitize_sequence) from matplotlib.cbook import mplDeprecation # deprecated -from matplotlib.rcsetup import defaultParams, validate_backend, cycler +from matplotlib.rcsetup import validate_backend, cycler import numpy @@ -614,7 +614,8 @@ def get_cachedir(): return _get_config_or_cache_dir(_get_xdg_cache_dir()) -def _get_data_path(): +@_logged_cached('matplotlib data path: %s') +def get_data_path(): """Return the path to matplotlib data.""" if 'MATPLOTLIBDATA' in os.environ: @@ -655,13 +656,6 @@ def get_candidate_paths(): raise RuntimeError('Could not find the matplotlib data files') -@_logged_cached('matplotlib data path: %s') -def get_data_path(): - if defaultParams['datapath'][0] is None: - defaultParams['datapath'][0] = _get_data_path() - return defaultParams['datapath'][0] - - @cbook.deprecated("3.1") def get_py2exe_datafiles(): data_path = Path(get_data_path()) @@ -749,9 +743,7 @@ class RcParams(MutableMapping, dict): :ref:`customizing-with-matplotlibrc-files` """ - validate = {key: converter - for key, (default, converter) in defaultParams.items() - if key not in _all_deprecated} + validate = rcsetup._validators # validate values on the way in def __init__(self, *args, **kwargs): @@ -807,6 +799,9 @@ def __getitem__(self, key): from matplotlib import pyplot as plt plt.switch_backend(rcsetup._auto_backend_sentinel) + elif key == "datapath": + return get_data_path() + return dict.__getitem__(self, key) def __repr__(self): @@ -916,7 +911,7 @@ def _rc_params_in_file(fname, fail_on_error=False): config = RcParams() for key, (val, line, line_no) in rc_temp.items(): - if key in defaultParams: + if key in rcsetup._validators: if fail_on_error: config[key] = val # try to convert to proper type or raise else: @@ -962,11 +957,8 @@ def rc_params_from_file(fname, fail_on_error=False, use_default_template=True): if not use_default_template: return config_from_file - iter_params = defaultParams.items() with cbook._suppress_matplotlib_deprecation_warning(): - config = RcParams([(key, default) for key, (default, _) in iter_params - if key not in _all_deprecated]) - config.update(config_from_file) + config = RcParams({**rcParamsDefault, **config_from_file}) if config['datapath'] is None: config['datapath'] = get_data_path() @@ -984,15 +976,28 @@ def rc_params_from_file(fname, fail_on_error=False, use_default_template=True): return config -# this is the instance used by the matplotlib classes -rcParams = rc_params() +# When constructing the global instances, we need to perform certain updates +# by explicitly calling the superclass (dict.update, dict.items) to avoid +# triggering resolution of _auto_backend_sentinel. +rcParamsDefault = _rc_params_in_file( + cbook._get_data_path("matplotlibrc"), fail_on_error=True) +with cbook._suppress_matplotlib_deprecation_warning(): + dict.update(rcParamsDefault, rcsetup._hardcoded_defaults) + +rcParams = RcParams() # The global instance. +with cbook._suppress_matplotlib_deprecation_warning(): + dict.update(rcParams, dict.items(rcParamsDefault)) + dict.update(rcParams, _rc_params_in_file(matplotlib_fname())) with cbook._suppress_matplotlib_deprecation_warning(): + defaultParams = rcsetup.defaultParams = { # Left only for backcompat. + # We want to resolve deprecated rcParams, but not backend... + key: [(rcsetup._auto_backend_sentinel if key == "backend" else + rcParamsDefault[key]), + validator] + for key, validator in rcsetup._validators.items()} rcParamsOrig = RcParams(rcParams.copy()) - rcParamsDefault = RcParams([(key, default) for key, (default, converter) in - defaultParams.items() - if key not in _all_deprecated]) if rcParams['axes.formatter.use_locale']: locale.setlocale(locale.LC_ALL, '') diff --git a/lib/matplotlib/cbook/__init__.py b/lib/matplotlib/cbook/__init__.py index f0e018c8068e..197391f473d4 100644 --- a/lib/matplotlib/cbook/__init__.py +++ b/lib/matplotlib/cbook/__init__.py @@ -439,7 +439,7 @@ def get_sample_data(fname, asfileobj=True): If the filename ends in .gz, the file is implicitly ungzipped. """ - path = Path(matplotlib._get_data_path(), 'sample_data', fname) + path = _get_data_path('sample_data', fname) if asfileobj: suffix = path.suffix.lower() if suffix == '.gz': diff --git a/lib/matplotlib/rcsetup.py b/lib/matplotlib/rcsetup.py index 26d54f61d0c1..86cf3b3535ea 100644 --- a/lib/matplotlib/rcsetup.py +++ b/lib/matplotlib/rcsetup.py @@ -630,7 +630,8 @@ def validate_sketch(s): elif isinstance(s, (list, tuple)): result = tuple([float(v) for v in s]) if len(result) != 3: - raise ValueError("path.sketch must be a tuple (scale, length, randomness)") + raise ValueError( + "path.sketch must be a tuple (scale, length, randomness)") return result @@ -809,21 +810,18 @@ def cycler(*args, **kwargs): def validate_cycler(s): """Return a Cycler object from a string repr or the object itself.""" if isinstance(s, str): + # TODO: We might want to rethink this... + # While I think I have it quite locked down, it is execution of + # arbitrary code without sanitation. + # Combine this with the possibility that rcparams might come from the + # internet (future plans), this could be downright dangerous. + # I locked it down by only having the 'cycler()' function available. + # UPDATE: Partly plugging a security hole. + # I really should have read this: + # http://nedbatchelder.com/blog/201206/eval_really_is_dangerous.html + # We should replace this eval with a combo of PyParsing and + # ast.literal_eval() try: - # TODO: We might want to rethink this... - # While I think I have it quite locked down, - # it is execution of arbitrary code without - # sanitation. - # Combine this with the possibility that rcparams - # might come from the internet (future plans), this - # could be downright dangerous. - # I locked it down by only having the 'cycler()' function - # available. - # UPDATE: Partly plugging a security hole. - # I really should have read this: - # http://nedbatchelder.com/blog/201206/eval_really_is_dangerous.html - # We should replace this eval with a combo of PyParsing and - # ast.literal_eval() if '.__' in s.replace(' ', ''): raise ValueError("'%s' seems to have dunder methods. Raising" " an exception for your safety") @@ -951,484 +949,464 @@ def _validate_linestyle(ls): "sequence.".format(ls)) -validate_axes_titlelocation = ValidateInStrings('axes.titlelocation', ['left', 'center', 'right']) +validate_axes_titlelocation = ValidateInStrings( + 'axes.titlelocation', ['left', 'center', 'right']) -# a map from key -> value, converter -defaultParams = { - 'backend': [_auto_backend_sentinel, validate_backend], - 'backend_fallback': [True, validate_bool], - 'webagg.port': [8988, validate_int], - 'webagg.address': ['127.0.0.1', validate_webagg_address], - 'webagg.open_in_browser': [True, validate_bool], - 'webagg.port_retries': [50, validate_int], - 'toolbar': ['toolbar2', validate_toolbar], - 'datapath': [None, validate_any], # see _get_data_path_cached - 'interactive': [False, validate_bool], - 'timezone': ['UTC', validate_string], + +_validators = { # key -> validator + 'backend': validate_backend, + 'backend_fallback': validate_bool, + 'webagg.port': validate_int, + 'webagg.address': validate_webagg_address, + 'webagg.open_in_browser': validate_bool, + 'webagg.port_retries': validate_int, + 'toolbar': validate_toolbar, + 'datapath': validate_any, # see _get_data_path_cached + 'interactive': validate_bool, + 'timezone': validate_string, # the verbosity setting - 'verbose.level': ['silent', _validate_verbose], - 'verbose.fileo': ['sys.stdout', validate_string], + 'verbose.level': _validate_verbose, + 'verbose.fileo': validate_string, # line props - 'lines.linewidth': [1.5, validate_float], # line width in points - 'lines.linestyle': ['-', _validate_linestyle], # solid line - 'lines.color': ['C0', validate_color], # first color in color cycle - 'lines.marker': ['None', validate_string], # marker name - 'lines.markerfacecolor': ['auto', validate_color_or_auto], # default color - 'lines.markeredgecolor': ['auto', validate_color_or_auto], # default color - 'lines.markeredgewidth': [1.0, validate_float], - 'lines.markersize': [6, validate_float], # markersize, in points - 'lines.antialiased': [True, validate_bool], # antialiased (no jaggies) - 'lines.dash_joinstyle': ['round', validate_joinstyle], - 'lines.solid_joinstyle': ['round', validate_joinstyle], - 'lines.dash_capstyle': ['butt', validate_capstyle], - 'lines.solid_capstyle': ['projecting', validate_capstyle], - 'lines.dashed_pattern': [[3.7, 1.6], validate_nseq_float(allow_none=True)], - 'lines.dashdot_pattern': [[6.4, 1.6, 1, 1.6], - validate_nseq_float(allow_none=True)], - 'lines.dotted_pattern': [[1, 1.65], validate_nseq_float(allow_none=True)], - 'lines.scale_dashes': [True, validate_bool], + 'lines.linewidth': validate_float, # line width in points + 'lines.linestyle': _validate_linestyle, # solid line + 'lines.color': validate_color, # first color in color cycle + 'lines.marker': validate_string, # marker name + 'lines.markerfacecolor': validate_color_or_auto, # default color + 'lines.markeredgecolor': validate_color_or_auto, # default color + 'lines.markeredgewidth': validate_float, + 'lines.markersize': validate_float, # markersize, in points + 'lines.antialiased': validate_bool, # antialiased (no jaggies) + 'lines.dash_joinstyle': validate_joinstyle, + 'lines.solid_joinstyle': validate_joinstyle, + 'lines.dash_capstyle': validate_capstyle, + 'lines.solid_capstyle': validate_capstyle, + 'lines.dashed_pattern': validate_nseq_float(allow_none=True), + 'lines.dashdot_pattern': validate_nseq_float(allow_none=True), + 'lines.dotted_pattern': validate_nseq_float(allow_none=True), + 'lines.scale_dashes': validate_bool, # marker props - 'markers.fillstyle': ['full', validate_fillstyle], + 'markers.fillstyle': validate_fillstyle, ## patch props - 'patch.linewidth': [1.0, validate_float], # line width in points - 'patch.edgecolor': ['black', validate_color], - 'patch.force_edgecolor': [False, validate_bool], - 'patch.facecolor': ['C0', validate_color], # first color in cycle - 'patch.antialiased': [True, validate_bool], # antialiased (no jaggies) + 'patch.linewidth': validate_float, # line width in points + 'patch.edgecolor': validate_color, + 'patch.force_edgecolor': validate_bool, + 'patch.facecolor': validate_color, # first color in cycle + 'patch.antialiased': validate_bool, # antialiased (no jaggies) ## hatch props - 'hatch.color': ['black', validate_color], - 'hatch.linewidth': [1.0, validate_float], + 'hatch.color': validate_color, + 'hatch.linewidth': validate_float, ## Histogram properties - 'hist.bins': [10, validate_hist_bins], + 'hist.bins': validate_hist_bins, ## Boxplot properties - 'boxplot.notch': [False, validate_bool], - 'boxplot.vertical': [True, validate_bool], - 'boxplot.whiskers': [1.5, validate_whiskers], - 'boxplot.bootstrap': [None, validate_int_or_None], - 'boxplot.patchartist': [False, validate_bool], - 'boxplot.showmeans': [False, validate_bool], - 'boxplot.showcaps': [True, validate_bool], - 'boxplot.showbox': [True, validate_bool], - 'boxplot.showfliers': [True, validate_bool], - 'boxplot.meanline': [False, validate_bool], - - 'boxplot.flierprops.color': ['black', validate_color], - 'boxplot.flierprops.marker': ['o', validate_string], - 'boxplot.flierprops.markerfacecolor': ['none', validate_color_or_auto], - 'boxplot.flierprops.markeredgecolor': ['black', validate_color], - 'boxplot.flierprops.markeredgewidth': [1.0, validate_float], - 'boxplot.flierprops.markersize': [6, validate_float], - 'boxplot.flierprops.linestyle': ['none', _validate_linestyle], - 'boxplot.flierprops.linewidth': [1.0, validate_float], - - 'boxplot.boxprops.color': ['black', validate_color], - 'boxplot.boxprops.linewidth': [1.0, validate_float], - 'boxplot.boxprops.linestyle': ['-', _validate_linestyle], - - 'boxplot.whiskerprops.color': ['black', validate_color], - 'boxplot.whiskerprops.linewidth': [1.0, validate_float], - 'boxplot.whiskerprops.linestyle': ['-', _validate_linestyle], - - 'boxplot.capprops.color': ['black', validate_color], - 'boxplot.capprops.linewidth': [1.0, validate_float], - 'boxplot.capprops.linestyle': ['-', _validate_linestyle], - - 'boxplot.medianprops.color': ['C1', validate_color], - 'boxplot.medianprops.linewidth': [1.0, validate_float], - 'boxplot.medianprops.linestyle': ['-', _validate_linestyle], - - 'boxplot.meanprops.color': ['C2', validate_color], - 'boxplot.meanprops.marker': ['^', validate_string], - 'boxplot.meanprops.markerfacecolor': ['C2', validate_color], - 'boxplot.meanprops.markeredgecolor': ['C2', validate_color], - 'boxplot.meanprops.markersize': [6, validate_float], - 'boxplot.meanprops.linestyle': ['--', _validate_linestyle], - 'boxplot.meanprops.linewidth': [1.0, validate_float], + 'boxplot.notch': validate_bool, + 'boxplot.vertical': validate_bool, + 'boxplot.whiskers': validate_whiskers, + 'boxplot.bootstrap': validate_int_or_None, + 'boxplot.patchartist': validate_bool, + 'boxplot.showmeans': validate_bool, + 'boxplot.showcaps': validate_bool, + 'boxplot.showbox': validate_bool, + 'boxplot.showfliers': validate_bool, + 'boxplot.meanline': validate_bool, + + 'boxplot.flierprops.color': validate_color, + 'boxplot.flierprops.marker': validate_string, + 'boxplot.flierprops.markerfacecolor': validate_color_or_auto, + 'boxplot.flierprops.markeredgecolor': validate_color, + 'boxplot.flierprops.markeredgewidth': validate_float, + 'boxplot.flierprops.markersize': validate_float, + 'boxplot.flierprops.linestyle': _validate_linestyle, + 'boxplot.flierprops.linewidth': validate_float, + + 'boxplot.boxprops.color': validate_color, + 'boxplot.boxprops.linewidth': validate_float, + 'boxplot.boxprops.linestyle': _validate_linestyle, + + 'boxplot.whiskerprops.color': validate_color, + 'boxplot.whiskerprops.linewidth': validate_float, + 'boxplot.whiskerprops.linestyle': _validate_linestyle, + + 'boxplot.capprops.color': validate_color, + 'boxplot.capprops.linewidth': validate_float, + 'boxplot.capprops.linestyle': _validate_linestyle, + + 'boxplot.medianprops.color': validate_color, + 'boxplot.medianprops.linewidth': validate_float, + 'boxplot.medianprops.linestyle': _validate_linestyle, + + 'boxplot.meanprops.color': validate_color, + 'boxplot.meanprops.marker': validate_string, + 'boxplot.meanprops.markerfacecolor': validate_color, + 'boxplot.meanprops.markeredgecolor': validate_color, + 'boxplot.meanprops.markersize': validate_float, + 'boxplot.meanprops.linestyle': _validate_linestyle, + 'boxplot.meanprops.linewidth': validate_float, ## font props - 'font.family': [['sans-serif'], validate_stringlist], # used by text object - 'font.style': ['normal', validate_string], - 'font.variant': ['normal', validate_string], - 'font.stretch': ['normal', validate_string], - 'font.weight': ['normal', validate_string], - 'font.size': [10, validate_float], # Base font size in points - 'font.serif': [['DejaVu Serif', 'Bitstream Vera Serif', - 'Computer Modern Roman', - 'New Century Schoolbook', 'Century Schoolbook L', - 'Utopia', 'ITC Bookman', 'Bookman', - 'Nimbus Roman No9 L', 'Times New Roman', - 'Times', 'Palatino', 'Charter', 'serif'], - validate_stringlist], - 'font.sans-serif': [['DejaVu Sans', 'Bitstream Vera Sans', - 'Computer Modern Sans Serif', - 'Lucida Grande', 'Verdana', 'Geneva', 'Lucid', - 'Arial', 'Helvetica', 'Avant Garde', 'sans-serif'], - validate_stringlist], - 'font.cursive': [['Apple Chancery', 'Textile', 'Zapf Chancery', - 'Sand', 'Script MT', 'Felipa', 'cursive'], - validate_stringlist], - 'font.fantasy': [['Comic Sans MS', 'Chicago', 'Charcoal', 'Impact', - 'Western', 'Humor Sans', 'xkcd', 'fantasy'], - validate_stringlist], - 'font.monospace': [['DejaVu Sans Mono', 'Bitstream Vera Sans Mono', - 'Computer Modern Typewriter', - 'Andale Mono', 'Nimbus Mono L', 'Courier New', - 'Courier', 'Fixed', 'Terminal', 'monospace'], - validate_stringlist], + 'font.family': validate_stringlist, # used by text object + 'font.style': validate_string, + 'font.variant': validate_string, + 'font.stretch': validate_string, + 'font.weight': validate_string, + 'font.size': validate_float, # Base font size in points + 'font.serif': validate_stringlist, + 'font.sans-serif': validate_stringlist, + 'font.cursive': validate_stringlist, + 'font.fantasy': validate_stringlist, + 'font.monospace': validate_stringlist, # text props - 'text.color': ['black', validate_color], - 'text.usetex': [False, validate_bool], - 'text.latex.unicode': [True, validate_bool], - 'text.latex.preamble': ['', _validate_tex_preamble], - 'text.latex.preview': [False, validate_bool], - 'text.hinting': ['auto', validate_hinting], - 'text.hinting_factor': [8, validate_int], - 'text.antialiased': [True, validate_bool], - - 'mathtext.cal': ['cursive', validate_font_properties], - 'mathtext.rm': ['sans', validate_font_properties], - 'mathtext.tt': ['monospace', validate_font_properties], - 'mathtext.it': ['sans:italic', validate_font_properties], - 'mathtext.bf': ['sans:bold', validate_font_properties], - 'mathtext.sf': ['sans', validate_font_properties], - 'mathtext.fontset': ['dejavusans', validate_fontset], - 'mathtext.default': ['it', validate_mathtext_default], - 'mathtext.fallback_to_cm': [True, validate_bool], - - 'image.aspect': ['equal', validate_aspect], # equal, auto, a number - 'image.interpolation': ['antialiased', validate_string], - 'image.cmap': ['viridis', validate_string], # gray, jet, etc. - 'image.lut': [256, validate_int], # lookup table - 'image.origin': ['upper', - ValidateInStrings('image.origin', ['upper', 'lower'])], - 'image.resample': [True, validate_bool], + 'text.color': validate_color, + 'text.usetex': validate_bool, + 'text.latex.unicode': validate_bool, + 'text.latex.preamble': _validate_tex_preamble, + 'text.latex.preview': validate_bool, + 'text.hinting': validate_hinting, + 'text.hinting_factor': validate_int, + 'text.antialiased': validate_bool, + + 'mathtext.cal': validate_font_properties, + 'mathtext.rm': validate_font_properties, + 'mathtext.tt': validate_font_properties, + 'mathtext.it': validate_font_properties, + 'mathtext.bf': validate_font_properties, + 'mathtext.sf': validate_font_properties, + 'mathtext.fontset': validate_fontset, + 'mathtext.default': validate_mathtext_default, + 'mathtext.fallback_to_cm': validate_bool, + + 'image.aspect': validate_aspect, # equal, auto, a number + 'image.interpolation': validate_string, + 'image.cmap': validate_string, # gray, jet, etc. + 'image.lut': validate_int, # lookup table + 'image.origin': ValidateInStrings('image.origin', + ['upper', 'lower']), + 'image.resample': validate_bool, # Specify whether vector graphics backends will combine all images on a # set of axes into a single composite image - 'image.composite_image': [True, validate_bool], + 'image.composite_image': validate_bool, # contour props - 'contour.negative_linestyle': ['dashed', _validate_linestyle], - 'contour.corner_mask': [True, validate_bool], + 'contour.negative_linestyle': _validate_linestyle, + 'contour.corner_mask': validate_bool, # errorbar props - 'errorbar.capsize': [0, validate_float], + 'errorbar.capsize': validate_float, # axes props - 'axes.axisbelow': ['line', validate_axisbelow], - 'axes.facecolor': ['white', validate_color], # background color - 'axes.edgecolor': ['black', validate_color], # edge color - 'axes.linewidth': [0.8, validate_float], # edge linewidth - - 'axes.spines.left': [True, validate_bool], # Set visibility of axes - 'axes.spines.right': [True, validate_bool], # 'spines', the lines - 'axes.spines.bottom': [True, validate_bool], # around the chart - 'axes.spines.top': [True, validate_bool], # denoting data boundary - - 'axes.titlesize': ['large', validate_fontsize], # fontsize of the - # axes title - 'axes.titlelocation': ['center', validate_axes_titlelocation], # alignment of axes title - 'axes.titleweight': ['normal', validate_string], # font weight of axes title - 'axes.titlecolor': ['auto', validate_color_or_auto], # font color of axes title - 'axes.titlepad': [6.0, validate_float], # pad from axes top to title in points - 'axes.grid': [False, validate_bool], # display grid or not - 'axes.grid.which': ['major', validate_axis_locator], # set whether the gid are by - # default draw on 'major' - # 'minor' or 'both' kind of - # axis locator - 'axes.grid.axis': ['both', validate_grid_axis], # grid type: - # 'x', 'y', or 'both' - 'axes.labelsize': ['medium', validate_fontsize], # fontsize of the - # x any y labels - 'axes.labelpad': [4.0, validate_float], # space between label and axis - 'axes.labelweight': ['normal', validate_string], # fontsize of the x any y labels - 'axes.labelcolor': ['black', validate_color], # color of axis label - 'axes.formatter.limits': [[-7, 7], validate_nseq_int(2)], + 'axes.axisbelow': validate_axisbelow, + 'axes.facecolor': validate_color, # background color + 'axes.edgecolor': validate_color, # edge color + 'axes.linewidth': validate_float, # edge linewidth + + 'axes.spines.left': validate_bool, # Set visibility of axes + 'axes.spines.right': validate_bool, # 'spines', the lines + 'axes.spines.bottom': validate_bool, # around the chart + 'axes.spines.top': validate_bool, # denoting data boundary + + 'axes.titlesize': validate_fontsize, # axes title fontsize + 'axes.titlelocation': validate_axes_titlelocation, # axes title alignment + 'axes.titleweight': validate_string, # axes title font weight + 'axes.titlecolor': validate_color_or_auto, # axes title font color + 'axes.titlepad': validate_float, # axes-top-to-title pad, in points + 'axes.grid': validate_bool, # display grid or not + 'axes.grid.which': validate_axis_locator, # whether the grid are by + # default drawn on 'major' + # 'minor' or 'both' axis + # locator + 'axes.grid.axis': validate_grid_axis, # grid type: 'x', 'y', 'both' + 'axes.labelsize': validate_fontsize, # fontsize of the x/y labels + 'axes.labelpad': validate_float, # space between label and axis + 'axes.labelweight': validate_string, # fontsize of the x any y labels + 'axes.labelcolor': validate_color, # color of axis label + 'axes.formatter.limits': validate_nseq_int(2), # use scientific notation if log10 # of the axis range is smaller than the # first or larger than the second - 'axes.formatter.use_locale': [False, validate_bool], + 'axes.formatter.use_locale': validate_bool, # Use the current locale to format ticks - 'axes.formatter.use_mathtext': [False, validate_bool], - 'axes.formatter.min_exponent': [0, validate_int], # minimum exponent to format in scientific notation - 'axes.formatter.useoffset': [True, validate_bool], - 'axes.formatter.offset_threshold': [4, validate_int], - 'axes.unicode_minus': [True, validate_bool], + 'axes.formatter.use_mathtext': validate_bool, + 'axes.formatter.min_exponent': validate_int, # minimum exponent to format + # in scientific notation + 'axes.formatter.useoffset': validate_bool, + 'axes.formatter.offset_threshold': validate_int, + 'axes.unicode_minus': validate_bool, # This entry can be either a cycler object or a # string repr of a cycler-object, which gets eval()'ed # to create the object. - 'axes.prop_cycle': [ - ccycler('color', - ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', - '#9467bd', '#8c564b', '#e377c2', '#7f7f7f', - '#bcbd22', '#17becf']), - validate_cycler], + 'axes.prop_cycle': validate_cycler, # If 'data', axes limits are set close to the data. # If 'round_numbers' axes limits are set to the nearest round numbers. - 'axes.autolimit_mode': [ - 'data', - ValidateInStrings('autolimit_mode', ['data', 'round_numbers'])], - 'axes.xmargin': [0.05, ValidateInterval(0, 1, - closedmin=True, - closedmax=True)], # margin added to xaxis - 'axes.ymargin': [0.05, ValidateInterval(0, 1, - closedmin=True, - closedmax=True)], # margin added to yaxis - - 'polaraxes.grid': [True, validate_bool], # display polar grid or - # not - 'axes3d.grid': [True, validate_bool], # display 3d grid + 'axes.autolimit_mode': ValidateInStrings('autolimit_mode', + ['data', 'round_numbers']), + 'axes.xmargin': ValidateInterval(0, 1, + closedmin=True, + closedmax=True), # margin added to xaxis + 'axes.ymargin': ValidateInterval(0, 1, + closedmin=True, + closedmax=True), # margin added to yaxis + + 'polaraxes.grid': validate_bool, # display polar grid or not + 'axes3d.grid': validate_bool, # display 3d grid # scatter props - 'scatter.marker': ['o', validate_string], - 'scatter.edgecolors': ['face', validate_string], + 'scatter.marker': validate_string, + 'scatter.edgecolors': validate_string, # TODO validate that these are valid datetime format strings - 'date.autoformatter.year': ['%Y', validate_string], - 'date.autoformatter.month': ['%Y-%m', validate_string], - 'date.autoformatter.day': ['%Y-%m-%d', validate_string], - 'date.autoformatter.hour': ['%m-%d %H', validate_string], - 'date.autoformatter.minute': ['%d %H:%M', validate_string], - 'date.autoformatter.second': ['%H:%M:%S', validate_string], - 'date.autoformatter.microsecond': ['%M:%S.%f', validate_string], + 'date.autoformatter.year': validate_string, + 'date.autoformatter.month': validate_string, + 'date.autoformatter.day': validate_string, + 'date.autoformatter.hour': validate_string, + 'date.autoformatter.minute': validate_string, + 'date.autoformatter.second': validate_string, + 'date.autoformatter.microsecond': validate_string, #legend properties - 'legend.fancybox': [True, validate_bool], - 'legend.loc': ['best', validate_legend_loc], + 'legend.fancybox': validate_bool, + 'legend.loc': validate_legend_loc, # the number of points in the legend line - 'legend.numpoints': [1, validate_int], + 'legend.numpoints': validate_int, # the number of points in the legend line for scatter - 'legend.scatterpoints': [1, validate_int], - 'legend.fontsize': ['medium', validate_fontsize], - 'legend.title_fontsize': [None, validate_fontsize_None], + 'legend.scatterpoints': validate_int, + 'legend.fontsize': validate_fontsize, + 'legend.title_fontsize': validate_fontsize_None, # the relative size of legend markers vs. original - 'legend.markerscale': [1.0, validate_float], - 'legend.shadow': [False, validate_bool], + 'legend.markerscale': validate_float, + 'legend.shadow': validate_bool, # whether or not to draw a frame around legend - 'legend.frameon': [True, validate_bool], + 'legend.frameon': validate_bool, # alpha value of the legend frame - 'legend.framealpha': [0.8, validate_float_or_None], + 'legend.framealpha': validate_float_or_None, ## the following dimensions are in fraction of the font size - 'legend.borderpad': [0.4, validate_float], # units are fontsize + 'legend.borderpad': validate_float, # units are fontsize # the vertical space between the legend entries - 'legend.labelspacing': [0.5, validate_float], + 'legend.labelspacing': validate_float, # the length of the legend lines - 'legend.handlelength': [2., validate_float], + 'legend.handlelength': validate_float, # the length of the legend lines - 'legend.handleheight': [0.7, validate_float], + 'legend.handleheight': validate_float, # the space between the legend line and legend text - 'legend.handletextpad': [.8, validate_float], + 'legend.handletextpad': validate_float, # the border between the axes and legend edge - 'legend.borderaxespad': [0.5, validate_float], + 'legend.borderaxespad': validate_float, # the border between the axes and legend edge - 'legend.columnspacing': [2., validate_float], - 'legend.facecolor': ['inherit', validate_color_or_inherit], - 'legend.edgecolor': ['0.8', validate_color_or_inherit], + 'legend.columnspacing': validate_float, + 'legend.facecolor': validate_color_or_inherit, + 'legend.edgecolor': validate_color_or_inherit, # tick properties - 'xtick.top': [False, validate_bool], # draw ticks on the top side - 'xtick.bottom': [True, validate_bool], # draw ticks on the bottom side - 'xtick.labeltop': [False, validate_bool], # draw label on the top - 'xtick.labelbottom': [True, validate_bool], # draw label on the bottom - 'xtick.major.size': [3.5, validate_float], # major xtick size in points - 'xtick.minor.size': [2, validate_float], # minor xtick size in points - 'xtick.major.width': [0.8, validate_float], # major xtick width in points - 'xtick.minor.width': [0.6, validate_float], # minor xtick width in points - 'xtick.major.pad': [3.5, validate_float], # distance to label in points - 'xtick.minor.pad': [3.4, validate_float], # distance to label in points - 'xtick.color': ['black', validate_color], # color of the xtick labels - 'xtick.minor.visible': [False, validate_bool], # visibility of the x axis minor ticks - 'xtick.minor.top': [True, validate_bool], # draw x axis top minor ticks - 'xtick.minor.bottom': [True, validate_bool], # draw x axis bottom minor ticks - 'xtick.major.top': [True, validate_bool], # draw x axis top major ticks - 'xtick.major.bottom': [True, validate_bool], # draw x axis bottom major ticks - - # fontsize of the xtick labels - 'xtick.labelsize': ['medium', validate_fontsize], - 'xtick.direction': ['out', validate_string], # direction of xticks - 'xtick.alignment': ["center", _validate_alignment], - - 'ytick.left': [True, validate_bool], # draw ticks on the left side - 'ytick.right': [False, validate_bool], # draw ticks on the right side - 'ytick.labelleft': [True, validate_bool], # draw tick labels on the left side - 'ytick.labelright': [False, validate_bool], # draw tick labels on the right side - 'ytick.major.size': [3.5, validate_float], # major ytick size in points - 'ytick.minor.size': [2, validate_float], # minor ytick size in points - 'ytick.major.width': [0.8, validate_float], # major ytick width in points - 'ytick.minor.width': [0.6, validate_float], # minor ytick width in points - 'ytick.major.pad': [3.5, validate_float], # distance to label in points - 'ytick.minor.pad': [3.4, validate_float], # distance to label in points - 'ytick.color': ['black', validate_color], # color of the ytick labels - 'ytick.minor.visible': [False, validate_bool], # visibility of the y axis minor ticks - 'ytick.minor.left': [True, validate_bool], # draw y axis left minor ticks - 'ytick.minor.right': [True, validate_bool], # draw y axis right minor ticks - 'ytick.major.left': [True, validate_bool], # draw y axis left major ticks - 'ytick.major.right': [True, validate_bool], # draw y axis right major ticks - - # fontsize of the ytick labels - 'ytick.labelsize': ['medium', validate_fontsize], - 'ytick.direction': ['out', validate_string], # direction of yticks - 'ytick.alignment': ["center_baseline", _validate_alignment], - - 'grid.color': ['#b0b0b0', validate_color], # grid color - 'grid.linestyle': ['-', _validate_linestyle], # solid - 'grid.linewidth': [0.8, validate_float], # in points - 'grid.alpha': [1.0, validate_float], + 'xtick.top': validate_bool, # draw ticks on the top + 'xtick.bottom': validate_bool, # draw ticks on the bottom + 'xtick.labeltop': validate_bool, # draw label on the top + 'xtick.labelbottom': validate_bool, # draw label on the bottom + 'xtick.major.size': validate_float, # major xtick size in points + 'xtick.minor.size': validate_float, # minor xtick size in points + 'xtick.major.width': validate_float, # major xtick width in points + 'xtick.minor.width': validate_float, # minor xtick width in points + 'xtick.major.pad': validate_float, # distance to label in points + 'xtick.minor.pad': validate_float, # distance to label in points + 'xtick.color': validate_color, # color of the xtick labels + 'xtick.minor.visible': validate_bool, # visibility of the minor xticks + 'xtick.minor.top': validate_bool, # draw x axis top minor ticks + 'xtick.minor.bottom': validate_bool, # draw x axis bottom minor ticks + 'xtick.major.top': validate_bool, # draw x axis top major ticks + 'xtick.major.bottom': validate_bool, # draw x axis bottom major ticks + 'xtick.labelsize': validate_fontsize, # fontsize of the xtick labels + 'xtick.direction': validate_string, # direction of xticks + 'xtick.alignment': _validate_alignment, + + 'ytick.left': validate_bool, # draw ticks on the left + 'ytick.right': validate_bool, # draw ticks on the right + 'ytick.labelleft': validate_bool, # draw tick labels on the left + 'ytick.labelright': validate_bool, # draw tick labels on the right + 'ytick.major.size': validate_float, # major ytick size in points + 'ytick.minor.size': validate_float, # minor ytick size in points + 'ytick.major.width': validate_float, # major ytick width in points + 'ytick.minor.width': validate_float, # minor ytick width in points + 'ytick.major.pad': validate_float, # distance to label in points + 'ytick.minor.pad': validate_float, # distance to label in points + 'ytick.color': validate_color, # color of the ytick labels + 'ytick.minor.visible': validate_bool, # visibility of the minor yticks + 'ytick.minor.left': validate_bool, # draw y axis left minor ticks + 'ytick.minor.right': validate_bool, # draw y axis right minor ticks + 'ytick.major.left': validate_bool, # draw y axis left major ticks + 'ytick.major.right': validate_bool, # draw y axis right major ticks + 'ytick.labelsize': validate_fontsize, # fontsize of the ytick labels + 'ytick.direction': validate_string, # direction of yticks + 'ytick.alignment': _validate_alignment, + + 'grid.color': validate_color, # grid color + 'grid.linestyle': _validate_linestyle, # solid + 'grid.linewidth': validate_float, # in points + 'grid.alpha': validate_float, ## figure props # figure title - 'figure.titlesize': ['large', validate_fontsize], - 'figure.titleweight': ['normal', validate_string], + 'figure.titlesize': validate_fontsize, + 'figure.titleweight': validate_string, # figure size in inches: width by height - 'figure.figsize': [[6.4, 4.8], validate_nseq_float(2)], - 'figure.dpi': [100, validate_float], # DPI - 'figure.facecolor': ['white', validate_color], - 'figure.edgecolor': ['white', validate_color], - 'figure.frameon': [True, validate_bool], - 'figure.autolayout': [False, validate_bool], - 'figure.max_open_warning': [20, validate_int], - - 'figure.subplot.left': [0.125, ValidateInterval(0, 1, closedmin=True, - closedmax=True)], - 'figure.subplot.right': [0.9, ValidateInterval(0, 1, closedmin=True, - closedmax=True)], - 'figure.subplot.bottom': [0.11, ValidateInterval(0, 1, closedmin=True, - closedmax=True)], - 'figure.subplot.top': [0.88, ValidateInterval(0, 1, closedmin=True, - closedmax=True)], - 'figure.subplot.wspace': [0.2, ValidateInterval(0, 1, closedmin=True, - closedmax=False)], - 'figure.subplot.hspace': [0.2, ValidateInterval(0, 1, closedmin=True, - closedmax=False)], + 'figure.figsize': validate_nseq_float(2), + 'figure.dpi': validate_float, # DPI + 'figure.facecolor': validate_color, + 'figure.edgecolor': validate_color, + 'figure.frameon': validate_bool, + 'figure.autolayout': validate_bool, + 'figure.max_open_warning': validate_int, + + 'figure.subplot.left': ValidateInterval(0, 1, closedmin=True, + closedmax=True), + 'figure.subplot.right': ValidateInterval(0, 1, closedmin=True, + closedmax=True), + 'figure.subplot.bottom': ValidateInterval(0, 1, closedmin=True, + closedmax=True), + 'figure.subplot.top': ValidateInterval(0, 1, closedmin=True, + closedmax=True), + 'figure.subplot.wspace': ValidateInterval(0, 1, closedmin=True, + closedmax=False), + 'figure.subplot.hspace': ValidateInterval(0, 1, closedmin=True, + closedmax=False), # do constrained_layout. - 'figure.constrained_layout.use': [False, validate_bool], + 'figure.constrained_layout.use': validate_bool, # wspace and hspace are fraction of adjacent subplots to use # for space. Much smaller than above because we don't need # room for the text. - 'figure.constrained_layout.hspace': [0.02, ValidateInterval( - 0, 1, closedmin=True, closedmax=False)], - 'figure.constrained_layout.wspace': [0.02, ValidateInterval( - 0, 1, closedmin=True, closedmax=False)], + 'figure.constrained_layout.hspace': ValidateInterval( + 0, 1, closedmin=True, closedmax=False), + 'figure.constrained_layout.wspace': ValidateInterval( + 0, 1, closedmin=True, closedmax=False), # This is a buffer around the axes in inches. This is 3pts. - 'figure.constrained_layout.h_pad': [0.04167, validate_float], - 'figure.constrained_layout.w_pad': [0.04167, validate_float], + 'figure.constrained_layout.h_pad': validate_float, + 'figure.constrained_layout.w_pad': validate_float, ## Saving figure's properties - 'savefig.dpi': ['figure', validate_dpi], # DPI - 'savefig.facecolor': ['white', validate_color], - 'savefig.edgecolor': ['white', validate_color], - 'savefig.frameon': [True, validate_bool], - 'savefig.orientation': ['portrait', validate_orientation], - 'savefig.jpeg_quality': [95, validate_int], + 'savefig.dpi': validate_dpi, # DPI + 'savefig.facecolor': validate_color, + 'savefig.edgecolor': validate_color, + 'savefig.frameon': validate_bool, + 'savefig.orientation': validate_orientation, + 'savefig.jpeg_quality': validate_int, # value checked by backend at runtime - 'savefig.format': ['png', update_savefig_format], + 'savefig.format': update_savefig_format, # options are 'tight', or 'standard'. 'standard' validates to None. - 'savefig.bbox': ['standard', validate_bbox], - 'savefig.pad_inches': [0.1, validate_float], + 'savefig.bbox': validate_bbox, + 'savefig.pad_inches': validate_float, # default directory in savefig dialog box - 'savefig.directory': ['~', validate_string], - 'savefig.transparent': [False, validate_bool], + 'savefig.directory': validate_string, + 'savefig.transparent': validate_bool, # Maintain shell focus for TkAgg - 'tk.window_focus': [False, validate_bool], + 'tk.window_focus': validate_bool, # Set the papersize/type - 'ps.papersize': ['letter', validate_ps_papersize], - 'ps.useafm': [False, validate_bool], + 'ps.papersize': validate_ps_papersize, + 'ps.useafm': validate_bool, # use ghostscript or xpdf to distill ps output - 'ps.usedistiller': [False, validate_ps_distiller], - 'ps.distiller.res': [6000, validate_int], # dpi - 'ps.fonttype': [3, validate_fonttype], # 3 (Type3) or 42 (Truetype) + 'ps.usedistiller': validate_ps_distiller, + 'ps.distiller.res': validate_int, # dpi + 'ps.fonttype': validate_fonttype, # 3 (Type3) or 42 (Truetype) # compression level from 0 to 9; 0 to disable - 'pdf.compression': [6, validate_int], + 'pdf.compression': validate_int, # ignore any color-setting commands from the frontend - 'pdf.inheritcolor': [False, validate_bool], + 'pdf.inheritcolor': validate_bool, # use only the 14 PDF core fonts embedded in every PDF viewing application - 'pdf.use14corefonts': [False, validate_bool], - 'pdf.fonttype': [3, validate_fonttype], # 3 (Type3) or 42 (Truetype) + 'pdf.use14corefonts': validate_bool, + 'pdf.fonttype': validate_fonttype, # 3 (Type3) or 42 (Truetype) - 'pgf.debug': [False, validate_bool], # output debug information + 'pgf.debug': validate_bool, # output debug information # choose latex application for creating pdf files (xelatex/lualatex) - 'pgf.texsystem': ['xelatex', validate_pgf_texsystem], + 'pgf.texsystem': validate_pgf_texsystem, # use matplotlib rc settings for font configuration - 'pgf.rcfonts': [True, validate_bool], + 'pgf.rcfonts': validate_bool, # provide a custom preamble for the latex process - 'pgf.preamble': ['', _validate_tex_preamble], + 'pgf.preamble': _validate_tex_preamble, # write raster image data directly into the svg file - 'svg.image_inline': [True, validate_bool], + 'svg.image_inline': validate_bool, # True to save all characters as paths in the SVG - 'svg.fonttype': ['path', validate_svg_fonttype], - 'svg.hashsalt': [None, validate_string_or_None], + 'svg.fonttype': validate_svg_fonttype, + 'svg.hashsalt': validate_string_or_None, # set this when you want to generate hardcopy docstring - 'docstring.hardcopy': [False, validate_bool], + 'docstring.hardcopy': validate_bool, - 'path.simplify': [True, validate_bool], - 'path.simplify_threshold': [1.0 / 9.0, ValidateInterval(0.0, 1.0)], - 'path.snap': [True, validate_bool], - 'path.sketch': [None, validate_sketch], - 'path.effects': [[], validate_any], - 'agg.path.chunksize': [0, validate_int], # 0 to disable chunking; + 'path.simplify': validate_bool, + 'path.simplify_threshold': ValidateInterval(0.0, 1.0), + 'path.snap': validate_bool, + 'path.sketch': validate_sketch, + 'path.effects': validate_anylist, + 'agg.path.chunksize': validate_int, # 0 to disable chunking # key-mappings (multi-character mappings should be a list/tuple) - 'keymap.fullscreen': [['f', 'ctrl+f'], validate_stringlist], - 'keymap.home': [['h', 'r', 'home'], validate_stringlist], - 'keymap.back': [['left', 'c', 'backspace', 'MouseButton.BACK'], - validate_stringlist], - 'keymap.forward': [['right', 'v', 'MouseButton.FORWARD'], - validate_stringlist], - 'keymap.pan': [['p'], validate_stringlist], - 'keymap.zoom': [['o'], validate_stringlist], - 'keymap.save': [['s', 'ctrl+s'], validate_stringlist], - 'keymap.quit': [['ctrl+w', 'cmd+w', 'q'], validate_stringlist], - 'keymap.quit_all': [['W', 'cmd+W', 'Q'], validate_stringlist], - 'keymap.grid': [['g'], validate_stringlist], - 'keymap.grid_minor': [['G'], validate_stringlist], - 'keymap.yscale': [['l'], validate_stringlist], - 'keymap.xscale': [['k', 'L'], validate_stringlist], - 'keymap.all_axes': [['a'], validate_stringlist], - 'keymap.help': [['f1'], validate_stringlist], - 'keymap.copy': [['ctrl+c', 'cmd+c'], validate_stringlist], + 'keymap.fullscreen': validate_stringlist, + 'keymap.home': validate_stringlist, + 'keymap.back': validate_stringlist, + 'keymap.forward': validate_stringlist, + 'keymap.pan': validate_stringlist, + 'keymap.zoom': validate_stringlist, + 'keymap.save': validate_stringlist, + 'keymap.quit': validate_stringlist, + 'keymap.quit_all': validate_stringlist, + 'keymap.grid': validate_stringlist, + 'keymap.grid_minor': validate_stringlist, + 'keymap.yscale': validate_stringlist, + 'keymap.xscale': validate_stringlist, + 'keymap.all_axes': validate_stringlist, + 'keymap.help': validate_stringlist, + 'keymap.copy': validate_stringlist, # Animation settings - 'animation.html': ['none', validate_movie_html_fmt], + 'animation.html': validate_movie_html_fmt, # Limit, in MB, of size of base64 encoded animation in HTML # (i.e. IPython notebook) - 'animation.embed_limit': [20, validate_float], - 'animation.writer': ['ffmpeg', validate_movie_writer], - 'animation.codec': ['h264', validate_string], - 'animation.bitrate': [-1, validate_int], + 'animation.embed_limit': validate_float, + 'animation.writer': validate_movie_writer, + 'animation.codec': validate_string, + 'animation.bitrate': validate_int, # Controls image format when frames are written to disk - 'animation.frame_format': ['png', validate_movie_frame_fmt], + 'animation.frame_format': validate_movie_frame_fmt, # Additional arguments for HTML writer - 'animation.html_args': [[], validate_stringlist], + 'animation.html_args': validate_stringlist, # Path to ffmpeg binary. If just binary name, subprocess uses $PATH. - 'animation.ffmpeg_path': ['ffmpeg', validate_string], + 'animation.ffmpeg_path': validate_string, # Additional arguments for ffmpeg movie writer (using pipes) - 'animation.ffmpeg_args': [[], validate_stringlist], + 'animation.ffmpeg_args': validate_stringlist, # Path to AVConv binary. If just binary name, subprocess uses $PATH. - 'animation.avconv_path': ['avconv', validate_string], + 'animation.avconv_path': validate_string, # Additional arguments for avconv movie writer (using pipes) - 'animation.avconv_args': [[], validate_stringlist], + 'animation.avconv_args': validate_stringlist, # Path to convert binary. If just binary name, subprocess uses $PATH. - 'animation.convert_path': ['convert', validate_string], + 'animation.convert_path': validate_string, # Additional arguments for convert movie writer (using pipes) - 'animation.convert_args': [[], validate_stringlist], + 'animation.convert_args': validate_stringlist, # Classic (pre 2.0) compatibility mode # This is used for things that are hard to make backward compatible # with a sane rcParam alone. This does *not* turn on classic mode # altogether. For that use `matplotlib.style.use('classic')`. - '_internal.classic_mode': [False, validate_bool] + '_internal.classic_mode': validate_bool +} + + +_hardcoded_defaults = { # Defaults not inferred from matplotlibrc.template... + # ... because it can't be: + 'backend': _auto_backend_sentinel, + # ... because they are private: + '_internal.classic_mode': False, + # ... because they are deprecated: + 'text.latex.unicode': True, + 'savefig.frameon': True, + 'verbose.level': 'silent', + 'verbose.fileo': 'sys.stdout', } diff --git a/lib/matplotlib/tests/test_rcparams.py b/lib/matplotlib/tests/test_rcparams.py index a6b4890cd6e6..7c1d23987b41 100644 --- a/lib/matplotlib/tests/test_rcparams.py +++ b/lib/matplotlib/tests/test_rcparams.py @@ -422,73 +422,18 @@ def test_keymaps(): def test_rcparams_reset_after_fail(): - # There was previously a bug that meant that if rc_context failed and # raised an exception due to issues in the supplied rc parameters, the # global rc parameters were left in a modified state. - with mpl.rc_context(rc={'text.usetex': False}): - assert mpl.rcParams['text.usetex'] is False - with pytest.raises(KeyError): with mpl.rc_context(rc=OrderedDict([('text.usetex', True), ('test.blah', True)])): pass - assert mpl.rcParams['text.usetex'] is False -def test_if_rctemplate_is_up_to_date(): - # This tests if the matplotlibrc.template file contains all valid rcParams. - deprecated = {*mpl._all_deprecated, *mpl._deprecated_remain_as_none} - with cbook._get_data_path('matplotlibrc').open() as file: - rclines = file.readlines() - missing = {} - for k, v in mpl.defaultParams.items(): - if k[0] == "_": - continue - if k in deprecated: - continue - found = False - for line in rclines: - if k in line: - found = True - if not found: - missing.update({k: v}) - if missing: - raise ValueError("The following params are missing in the " - "matplotlibrc.template file: {}" - .format(missing.items())) - - -def test_if_rctemplate_would_be_valid(tmpdir): - # This tests if the matplotlibrc.template file would result in a valid - # rc file if all lines are uncommented. - with cbook._get_data_path('matplotlibrc').open() as file: - rclines = file.readlines() - newlines = [] - for line in rclines: - if line[0] == "#": - newline = line[1:] - else: - newline = line - if "$TEMPLATE_BACKEND" in newline: - newline = "backend : Agg" - if "datapath" in newline: - newline = "" - newlines.append(newline) - d = tmpdir.mkdir('test1') - fname = str(d.join('testrcvalid.temp')) - with open(fname, "w") as f: - f.writelines(newlines) - with pytest.warns(None) as record: - mpl.rc_params_from_file(fname, - fail_on_error=True, - use_default_template=False) - assert len(record) == 0 - - @pytest.mark.skipif(sys.platform != "linux", reason="Linux only") def test_backend_fallback_headless(tmpdir): env = {**os.environ, diff --git a/matplotlibrc.template b/matplotlibrc.template index 67761328dbdc..c9be954cf109 100644 --- a/matplotlibrc.template +++ b/matplotlibrc.template @@ -1,745 +1,745 @@ -#### MATPLOTLIBRC FORMAT - -## This is a sample matplotlib configuration file - you can find a copy -## of it on your system in site-packages/matplotlib/mpl-data/matplotlibrc -## (which related to your Python installation location). -## -## If you edit it there, please note that it will be overwritten in your -## next install. If you want to keep a permanent local copy that will not -## be overwritten, place it in one of the following locations: -## unix/linux: -## $HOME/.config/matplotlib/matplotlibrc OR -## $XDG_CONFIG_HOME/matplotlib/matplotlibrc (if $XDG_CONFIG_HOME is set) -## other platforms: -## $HOME/.matplotlib/matplotlibrc -## -## See https://matplotlib.org/users/customizing.html#the-matplotlibrc-file -## for more details on the paths which are checked for the configuration file. -## -## This file is best viewed in a editor which supports python mode syntax -## highlighting. Blank lines, or lines starting with a comment symbol, are -## ignored, as are trailing comments. Other lines must have the format: -## key : val ## optional comment -## -## Formatting and style conventions for this file: -## - at least one whitesapce AROUND `:` to seperate key and val -## * prefer one whitesapce except for block colon alignment -## - at least two whitesapces BEFORE `##` to seperate the key-val pair and -## the trailing comments -## * prefer two whitesapces except for block `##` alignment -## - at least one whitesapce AFTER `##` to seperate the `##` marker and -## the comment text -## * prefer one whitesapce except for indentation (listing, etc.), in -## which case, four more whitespaces are preferred -## -## Colors: for the color values below, you can either use -## - a matplotlib color string, such as r, k, or b -## - an rgb tuple, such as (1.0, 0.5, 0.0) -## - a hex string, such as ff00ff -## - a scalar grayscale intensity such as 0.75 -## - a legal html color name, e.g., red, blue, darkslategray -## -## Matplotlib configuration are currently divided into following parts: -## - BACKENDS -## - LINES -## - PATCHES -## - HATCHES -## - BOXPLOT -## - FONT -## - TEXT -## - LaTeX -## - AXES -## - DATES -## - TICKS -## - GRIDS -## - LEGEND -## - FIGURE -## - IMAGES -## - CONTOUR PLOTS -## - ERRORBAR PLOTS -## - HISTOGRAM PLOTS -## - SCATTER PLOTS -## - AGG RENDERING -## - PATHS -## - SAVING FIGURES -## - INTERACTIVE KEYMAPS -## - ANIMATION - -##### CONFIGURATION BEGINS HERE - - -## *************************************************************************** -## * BACKENDS * -## *************************************************************************** -## The default backend. If you omit this parameter, the first working -## backend from the following list is used: -## MacOSX Qt5Agg Qt4Agg Gtk3Agg TkAgg WxAgg Agg -## Other choices include: -## Qt5Cairo Qt4Cairo GTK3Cairo TkCairo WxCairo Cairo Wx -## PS PDF SVG Template -## You can also deploy your own backend outside of matplotlib by referring to -## the module name (which must be in the PYTHONPATH) as 'module://my_backend'. +### MATPLOTLIBRC FORMAT + +# This is a sample matplotlib configuration file - you can find a copy +# of it on your system in site-packages/matplotlib/mpl-data/matplotlibrc +# (which related to your Python installation location). +# +# If you edit it there, please note that it will be overwritten in your +# next install. If you want to keep a permanent local copy that will not +# be overwritten, place it in one of the following locations: +# unix/linux: +# $HOME/.config/matplotlib/matplotlibrc OR +# $XDG_CONFIG_HOME/matplotlib/matplotlibrc (if $XDG_CONFIG_HOME is set) +# other platforms: +# $HOME/.matplotlib/matplotlibrc +# +# See https://matplotlib.org/users/customizing.html#the-matplotlibrc-file +# for more details on the paths which are checked for the configuration file. +# +# This file is best viewed in a editor which supports python mode syntax +# highlighting. Blank lines, or lines starting with a comment symbol, are +# ignored, as are trailing comments. Other lines must have the format: +# key : val ## optional comment +# +# Formatting and style conventions for this file: +# - at least one whitesapce AROUND `:` to seperate key and val +# * prefer one whitesapce except for block colon alignment +# - at least two whitesapces BEFORE `##` to seperate the key-val pair and +# the trailing comments +# * prefer two whitesapces except for block `##` alignment +# - at least one whitesapce AFTER `##` to seperate the `##` marker and +# the comment text +# * prefer one whitesapce except for indentation (listing, etc.), in +# which case, four more whitespaces are preferred +# +# Colors: for the color values below, you can either use +# - a matplotlib color string, such as r, k, or b +# - an rgb tuple, such as (1.0, 0.5, 0.0) +# - a hex string, such as ff00ff +# - a scalar grayscale intensity such as 0.75 +# - a legal html color name, e.g., red, blue, darkslategray +# +# Matplotlib configuration are currently divided into following parts: +# - BACKENDS +# - LINES +# - PATCHES +# - HATCHES +# - BOXPLOT +# - FONT +# - TEXT +# - LaTeX +# - AXES +# - DATES +# - TICKS +# - GRIDS +# - LEGEND +# - FIGURE +# - IMAGES +# - CONTOUR PLOTS +# - ERRORBAR PLOTS +# - HISTOGRAM PLOTS +# - SCATTER PLOTS +# - AGG RENDERING +# - PATHS +# - SAVING FIGURES +# - INTERACTIVE KEYMAPS +# - ANIMATION + +#### CONFIGURATION BEGINS HERE + + +# *************************************************************************** +# * BACKENDS * +# *************************************************************************** +# The default backend. If you omit this parameter, the first working +# backend from the following list is used: +# MacOSX Qt5Agg Qt4Agg Gtk3Agg TkAgg WxAgg Agg +# Other choices include: +# Qt5Cairo Qt4Cairo GTK3Cairo TkCairo WxCairo Cairo Wx +# PS PDF SVG Template +# You can also deploy your own backend outside of matplotlib by referring to +# the module name (which must be in the PYTHONPATH) as 'module://my_backend'. #backend : Agg -## The port to use for the web server in the WebAgg backend. -#webagg.port : 8988 - -## The address on which the WebAgg web server should be reachable -#webagg.address : 127.0.0.1 - -## If webagg.port is unavailable, a number of other random ports will -## be tried until one that is available is found. -#webagg.port_retries : 50 - -## When True, open the webbrowser to the plot that is shown -#webagg.open_in_browser : True - -## If you are running pyplot inside a GUI and your backend choice -## conflicts, we will automatically try to find a compatible one for -## you if backend_fallback is True -#backend_fallback : True - -#interactive : False -#toolbar : toolbar2 ## {None, toolbar2} -#timezone : UTC ## a pytz timezone string, e.g., US/Central or Europe/Paris - -## Where your matplotlib data lives if you installed to a non-default -## location. This is where the matplotlib fonts, bitmaps, etc reside -#datapath : /home/jdhunter/mpldata - - -## *************************************************************************** -## * LINES * -## *************************************************************************** -## See https://matplotlib.org/api/artist_api.html#module-matplotlib.lines -## for more information on line properties. -#lines.linewidth : 1.5 ## line width in points -#lines.linestyle : - ## solid line -#lines.color : C0 ## has no affect on plot(); see axes.prop_cycle -#lines.marker : None ## the default marker -#lines.markerfacecolor : auto ## the default marker face color -#lines.markeredgecolor : auto ## the default marker edge color -#lines.markeredgewidth : 1.0 ## the line width around the marker symbol -#lines.markersize : 6 ## marker size, in points -#lines.dash_joinstyle : round ## {miter, round, bevel} -#lines.dash_capstyle : butt ## {butt, round, projecting} -#lines.solid_joinstyle : round ## {miter, round, bevel} -#lines.solid_capstyle : projecting ## {butt, round, projecting} -#lines.antialiased : True ## render lines in antialiased (no jaggies) - -## The three standard dash patterns. These are scaled by the linewidth. -#lines.dashed_pattern : 3.7, 1.6 -#lines.dashdot_pattern : 6.4, 1.6, 1, 1.6 -#lines.dotted_pattern : 1, 1.65 -#lines.scale_dashes : True - -#markers.fillstyle : full ## {full, left, right, bottom, top, none} - - -## *************************************************************************** -## * PATCHES * -## *************************************************************************** -## Patches are graphical objects that fill 2D space, like polygons or circles. -## See https://matplotlib.org/api/artist_api.html#module-matplotlib.patches -## for more information on patch properties. -#patch.linewidth : 1 ## edge width in points. -#patch.facecolor : C0 -#patch.edgecolor : black ## if forced, or patch is not filled -#patch.force_edgecolor : False ## True to always use edgecolor -#patch.antialiased : True ## render patches in antialiased (no jaggies) - - -## *************************************************************************** -## * HATCHES * -## *************************************************************************** -#hatch.color : black -#hatch.linewidth : 1.0 - - -## *************************************************************************** -## * BOXPLOT * -## *************************************************************************** -#boxplot.notch : False -#boxplot.vertical : True -#boxplot.whiskers : 1.5 -#boxplot.bootstrap : None -#boxplot.patchartist : False -#boxplot.showmeans : False -#boxplot.showcaps : True -#boxplot.showbox : True -#boxplot.showfliers : True -#boxplot.meanline : False - -#boxplot.flierprops.color : black -#boxplot.flierprops.marker : o -#boxplot.flierprops.markerfacecolor : none -#boxplot.flierprops.markeredgecolor : black -#boxplot.flierprops.markeredgewidth : 1.0 -#boxplot.flierprops.markersize : 6 -#boxplot.flierprops.linestyle : none -#boxplot.flierprops.linewidth : 1.0 - -#boxplot.boxprops.color : black -#boxplot.boxprops.linewidth : 1.0 -#boxplot.boxprops.linestyle : - - -#boxplot.whiskerprops.color : black -#boxplot.whiskerprops.linewidth : 1.0 -#boxplot.whiskerprops.linestyle : - - -#boxplot.capprops.color : black -#boxplot.capprops.linewidth : 1.0 -#boxplot.capprops.linestyle : - - -#boxplot.medianprops.color : C1 -#boxplot.medianprops.linewidth : 1.0 -#boxplot.medianprops.linestyle : - - -#boxplot.meanprops.color : C2 -#boxplot.meanprops.marker : ^ -#boxplot.meanprops.markerfacecolor : C2 -#boxplot.meanprops.markeredgecolor : C2 -#boxplot.meanprops.markersize : 6 -#boxplot.meanprops.linestyle : -- -#boxplot.meanprops.linewidth : 1.0 - - -## *************************************************************************** -## * FONT * -## *************************************************************************** -## The font properties used by `text.Text`. -## See https://matplotlib.org/api/font_manager_api.html for more information -## on font properties. The 6 font properties used for font matching are -## given below with their default values. -## -## The font.family property has five values: -## - 'serif' (e.g., Times), -## - 'sans-serif' (e.g., Helvetica), -## - 'cursive' (e.g., Zapf-Chancery), -## - 'fantasy' (e.g., Western), and -## - 'monospace' (e.g., Courier). -## Each of these font families has a default list of font names in decreasing -## order of priority associated with them. When text.usetex is False, -## font.family may also be one or more concrete font names. -## -## The font.style property has three values: normal (or roman), italic -## or oblique. The oblique style will be used for italic, if it is not -## present. -## -## The font.variant property has two values: normal or small-caps. For -## TrueType fonts, which are scalable fonts, small-caps is equivalent -## to using a font size of 'smaller', or about 83%% of the current font -## size. -## -## The font.weight property has effectively 13 values: normal, bold, -## bolder, lighter, 100, 200, 300, ..., 900. Normal is the same as -## 400, and bold is 700. bolder and lighter are relative values with -## respect to the current weight. -## -## The font.stretch property has 11 values: ultra-condensed, -## extra-condensed, condensed, semi-condensed, normal, semi-expanded, -## expanded, extra-expanded, ultra-expanded, wider, and narrower. This -## property is not currently implemented. -## -## The font.size property is the default font size for text, given in pts. -## 10 pt is the standard value. -## -## Note that font.size controls default text sizes. To configure -## special text sizes tick labels, axes, labels, title, etc, see the rc -## settings for axes and ticks. Special text sizes can be defined -## relative to font.size, using the following values: xx-small, x-small, -## small, medium, large, x-large, xx-large, larger, or smaller - -#font.family : sans-serif -#font.style : normal -#font.variant : normal -#font.weight : normal -#font.stretch : normal -#font.size : 10.0 - -#font.serif : DejaVu Serif, Bitstream Vera Serif, Computer Modern Roman, New Century Schoolbook, Century Schoolbook L, Utopia, ITC Bookman, Bookman, Nimbus Roman No9 L, Times New Roman, Times, Palatino, Charter, serif -#font.sans-serif : DejaVu Sans, Bitstream Vera Sans, Computer Modern Sans Serif, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif -#font.cursive : Apple Chancery, Textile, Zapf Chancery, Sand, Script MT, Felipa, cursive -#font.fantasy : Comic Sans MS, Chicago, Charcoal, ImpactWestern, Humor Sans, xkcd, fantasy -#font.monospace : DejaVu Sans Mono, Bitstream Vera Sans Mono, Computer Modern Typewriter, Andale Mono, Nimbus Mono L, Courier New, Courier, Fixed, Terminal, monospace - - -## *************************************************************************** -## * TEXT * -## *************************************************************************** -## The text properties used by `text.Text`. -## See https://matplotlib.org/api/artist_api.html#module-matplotlib.text -## for more information on text properties -#text.color : black - - -## *************************************************************************** -## * LaTeX * -## *************************************************************************** -## See following links for more information on LaTex properties: -## https://matplotlib.org/tutorials/text/usetex.html -## https://scipy-cookbook.readthedocs.io/items/idx_matplotlib_typesetting.html -#text.usetex : False ## use latex for all text handling. The following fonts - ## are supported through the usual rc parameter settings: - ## new century schoolbook, bookman, times, palatino, - ## zapf chancery, charter, serif, sans-serif, helvetica, - ## avant garde, courier, monospace, computer modern roman, - ## computer modern sans serif, computer modern typewriter - ## If another font is desired which can loaded using the - ## LaTeX \usepackage command, please inquire at the - ## matplotlib mailing list -#text.latex.preamble : ## IMPROPER USE OF THIS FEATURE WILL LEAD TO LATEX FAILURES - ## AND IS THEREFORE UNSUPPORTED. PLEASE DO NOT ASK FOR HELP - ## IF THIS FEATURE DOES NOT DO WHAT YOU EXPECT IT TO. - ## text.latex.preamble is a single line of LaTeX code that - ## will be passed on to the LaTeX system. It may contain - ## any code that is valid for the LaTeX "preamble", i.e. - ## between the "\documentclass" and "\begin{document}" - ## statements. - ## Note that it has to be put on a single line, which may - ## become quite long. - ## The following packages are always loaded with usetex, so - ## beware of package collisions: color, geometry, graphicx, - ## type1cm, textcomp. - ## Adobe Postscript (PSSNFS) font packages may also be - ## loaded, depending on your font settings. -#text.latex.preview : False - -#text.hinting : auto ## May be one of the following: - ## - none: Perform no hinting - ## - auto: Use FreeType's autohinter - ## - native: Use the hinting information in the - ## font file, if available, and if your - ## FreeType library supports it - ## - either: Use the native hinting information, - ## or the autohinter if none is available. -#text.hinting_factor : 8 ## Specifies the amount of softness for hinting in the - ## horizontal direction. A value of 1 will hint to full - ## pixels. A value of 2 will hint to half pixels etc. -#text.antialiased : True ## If True (default), the text will be antialiased. - ## This only affects the Agg backend. - -## The following settings allow you to select the fonts in math mode. -## They map from a TeX font name to a fontconfig font pattern. -## These settings are only used if mathtext.fontset is 'custom'. -## Note that this "custom" mode is unsupported and may go away in the future. -#mathtext.cal : cursive -#mathtext.rm : sans -#mathtext.tt : monospace -#mathtext.it : sans:italic -#mathtext.bf : sans:bold -#mathtext.sf : sans -#mathtext.fontset : dejavusans ## Should be 'dejavusans' (default), - ## 'dejavuserif', 'cm' (Computer Modern), 'stix', - ## 'stixsans' or 'custom' -#mathtext.fallback_to_cm : True ## When True, use symbols from the Computer Modern - ## fonts when a symbol can not be found in one of - ## the custom math fonts. -#mathtext.default : it ## The default font to use for math. - ## Can be any of the LaTeX font names, including - ## the special name "regular" for the same font - ## used in regular text. - - -## *************************************************************************** -## * AXES * -## *************************************************************************** -## Following are default face and edge colors, default tick sizes, -## default fontsizes for ticklabels, and so on. See -## https://matplotlib.org/api/axes_api.html#module-matplotlib.axes -#axes.facecolor : white ## axes background color -#axes.edgecolor : black ## axes edge color -#axes.linewidth : 0.8 ## edge linewidth -#axes.grid : False ## display grid or not -#axes.grid.axis : both ## which axis the grid should apply to -#axes.grid.which : major ## gridlines at {major, minor, both} ticks -#axes.titlelocation : center ## alignment of the title: {left, right, center} -#axes.titlesize : large ## fontsize of the axes title -#axes.titleweight : normal ## font weight of title -#axes.titlecolor : auto ## color of the axes title, auto falls back to text.color - ## as default value -#axes.titlepad : 6.0 ## pad between axes and title in points -#axes.labelsize : medium ## fontsize of the x any y labels -#axes.labelpad : 4.0 ## space between label and axis -#axes.labelweight : normal ## weight of the x and y labels -#axes.labelcolor : black -#axes.axisbelow : line ## draw axis gridlines and ticks: - ## - below patches (True) - ## - above patches but below lines ('line') - ## - above all (False) - -#axes.formatter.limits : -7, 7 ## use scientific notation if log10 - ## of the axis range is smaller than the - ## first or larger than the second -#axes.formatter.use_locale : False ## When True, format tick labels - ## according to the user's locale. - ## For example, use ',' as a decimal - ## separator in the fr_FR locale. -#axes.formatter.use_mathtext : False ## When True, use mathtext for scientific - ## notation. -#axes.formatter.min_exponent : 0 ## minimum exponent to format in scientific notation -#axes.formatter.useoffset : True ## If True, the tick label formatter - ## will default to labeling ticks relative - ## to an offset when the data range is - ## small compared to the minimum absolute - ## value of the data. -#axes.formatter.offset_threshold : 4 ## When useoffset is True, the offset - ## will be used when it can remove - ## at least this number of significant - ## digits from tick labels. - -#axes.spines.left : True ## display axis spines -#axes.spines.bottom : True -#axes.spines.top : True -#axes.spines.right : True - -#axes.unicode_minus : True ## use Unicode for the minus symbol - ## rather than hyphen. See - ## https://en.wikipedia.org/wiki/Plus_and_minus_signs#Character_codes -#axes.prop_cycle : cycler('color', ['1f77b4', 'ff7f0e', '2ca02c', 'd62728', '9467bd', '8c564b', 'e377c2', '7f7f7f', 'bcbd22', '17becf']) - ## color cycle for plot lines as list of string colorspecs: - ## single letter, long name, or web-style hex - ## As opposed to all other paramters in this file, the color - ## values must be enclosed in quotes for this parameter, - # e.g. '1f77b4', instead of 1f77b4. - ## See also https://matplotlib.org/tutorials/intermediate/color_cycle.html - ## for more details on prop_cycle usage. -#axes.autolimit_mode : data ## How to scale axes limits to the data. By using: - ## - "data" to use data limits, plus some margin - ## - "round_numbers" move to the nearest "round" number -#axes.xmargin : .05 ## x margin. See `axes.Axes.margins` -#axes.ymargin : .05 ## y margin. See `axes.Axes.margins` -#polaraxes.grid : True ## display grid on polar axes -#axes3d.grid : True ## display grid on 3d axes - - -## *************************************************************************** -## * DATES * -## *************************************************************************** -## These control the default format strings used in AutoDateFormatter. -## Any valid format datetime format string can be used (see the python -## `datetime` for details). For example, by using: -## - '%%x' will use the locale date representation -## - '%%X' will use the locale time representation -## - '%%c' will use the full locale datetime representation -## These values map to the scales: -## {'year': 365, 'month': 30, 'day': 1, 'hour': 1/24, 'minute': 1 / (24 * 60)} - -#date.autoformatter.year : %Y -#date.autoformatter.month : %Y-%m -#date.autoformatter.day : %Y-%m-%d -#date.autoformatter.hour : %m-%d %H -#date.autoformatter.minute : %d %H:%M -#date.autoformatter.second : %H:%M:%S -#date.autoformatter.microsecond : %M:%S.%f - - -## *************************************************************************** -## * TICKS * -## *************************************************************************** -## See https://matplotlib.org/api/axis_api.html#matplotlib.axis.Tick -#xtick.top : False ## draw ticks on the top side -#xtick.bottom : True ## draw ticks on the bottom side -#xtick.labeltop : False ## draw label on the top -#xtick.labelbottom : True ## draw label on the bottom -#xtick.major.size : 3.5 ## major tick size in points -#xtick.minor.size : 2 ## minor tick size in points -#xtick.major.width : 0.8 ## major tick width in points -#xtick.minor.width : 0.6 ## minor tick width in points -#xtick.major.pad : 3.5 ## distance to major tick label in points -#xtick.minor.pad : 3.4 ## distance to the minor tick label in points -#xtick.color : black ## color of the tick labels -#xtick.labelsize : medium ## fontsize of the tick labels -#xtick.direction : out ## direction: {in, out, inout} -#xtick.minor.visible : False ## visibility of minor ticks on x-axis -#xtick.major.top : True ## draw x axis top major ticks -#xtick.major.bottom : True ## draw x axis bottom major ticks -#xtick.minor.top : True ## draw x axis top minor ticks -#xtick.minor.bottom : True ## draw x axis bottom minor ticks -#xtick.alignment : center ## alignment of xticks - -#ytick.left : True ## draw ticks on the left side -#ytick.right : False ## draw ticks on the right side -#ytick.labelleft : True ## draw tick labels on the left side -#ytick.labelright : False ## draw tick labels on the right side -#ytick.major.size : 3.5 ## major tick size in points -#ytick.minor.size : 2 ## minor tick size in points -#ytick.major.width : 0.8 ## major tick width in points -#ytick.minor.width : 0.6 ## minor tick width in points -#ytick.major.pad : 3.5 ## distance to major tick label in points -#ytick.minor.pad : 3.4 ## distance to the minor tick label in points -#ytick.color : black ## color of the tick labels -#ytick.labelsize : medium ## fontsize of the tick labels -#ytick.direction : out ## direction: {in, out, inout} -#ytick.minor.visible : False ## visibility of minor ticks on y-axis -#ytick.major.left : True ## draw y axis left major ticks -#ytick.major.right : True ## draw y axis right major ticks -#ytick.minor.left : True ## draw y axis left minor ticks -#ytick.minor.right : True ## draw y axis right minor ticks -#ytick.alignment : center_baseline ## alignment of yticks - - -## *************************************************************************** -## * GRIDS * -## *************************************************************************** -#grid.color : b0b0b0 ## grid color -#grid.linestyle : - ## solid -#grid.linewidth : 0.8 ## in points -#grid.alpha : 1.0 ## transparency, between 0.0 and 1.0 - - -## *************************************************************************** -## * LEGEND * -## *************************************************************************** -#legend.loc : best -#legend.frameon : True ## if True, draw the legend on a background patch -#legend.framealpha : 0.8 ## legend patch transparency -#legend.facecolor : inherit ## inherit from axes.facecolor; or color spec -#legend.edgecolor : 0.8 ## background patch boundary color -#legend.fancybox : True ## if True, use a rounded box for the - ## legend background, else a rectangle -#legend.shadow : False ## if True, give background a shadow effect -#legend.numpoints : 1 ## the number of marker points in the legend line -#legend.scatterpoints : 1 ## number of scatter points -#legend.markerscale : 1.0 ## the relative size of legend markers vs. original -#legend.fontsize : medium -#legend.title_fontsize : None ## None sets to the same as the default axes. - -## Dimensions as fraction of fontsize: -#legend.borderpad : 0.4 ## border whitespace -#legend.labelspacing : 0.5 ## the vertical space between the legend entries -#legend.handlelength : 2.0 ## the length of the legend lines -#legend.handleheight : 0.7 ## the height of the legend handle -#legend.handletextpad : 0.8 ## the space between the legend line and legend text -#legend.borderaxespad : 0.5 ## the border between the axes and legend edge -#legend.columnspacing : 2.0 ## column separation - - -## *************************************************************************** -## * FIGURE * -## *************************************************************************** -## See https://matplotlib.org/api/figure_api.html#matplotlib.figure.Figure -#figure.titlesize : large ## size of the figure title (``Figure.suptitle()``) -#figure.titleweight : normal ## weight of the figure title -#figure.figsize : 6.4, 4.8 ## figure size in inches -#figure.dpi : 100 ## figure dots per inch -#figure.facecolor : white ## figure facecolor -#figure.edgecolor : white ## figure edgecolor -#figure.frameon : True ## enable figure frame -#figure.max_open_warning : 20 ## The maximum number of figures to open through - ## the pyplot interface before emitting a warning. - ## If less than one this feature is disabled. - -## The figure subplot parameters. All dimensions are a fraction of the figure width and height. -#figure.subplot.left : 0.125 ## the left side of the subplots of the figure -#figure.subplot.right : 0.9 ## the right side of the subplots of the figure -#figure.subplot.bottom : 0.11 ## the bottom of the subplots of the figure -#figure.subplot.top : 0.88 ## the top of the subplots of the figure -#figure.subplot.wspace : 0.2 ## the amount of width reserved for space between subplots, - ## expressed as a fraction of the average axis width -#figure.subplot.hspace : 0.2 ## the amount of height reserved for space between subplots, - ## expressed as a fraction of the average axis height - -## Figure layout -#figure.autolayout : False ## When True, automatically adjust subplot - ## parameters to make the plot fit the figure - ## using `tight_layout` -#figure.constrained_layout.use : False ## When True, automatically make plot - ## elements fit on the figure. (Not - ## compatible with `autolayout`, above). -#figure.constrained_layout.h_pad : 0.04167 ## Padding around axes objects. Float representing -#figure.constrained_layout.w_pad : 0.04167 ## inches. Default is 3./72. inches (3 pts) -#figure.constrained_layout.hspace : 0.02 ## Space between subplot groups. Float representing -#figure.constrained_layout.wspace : 0.02 ## a fraction of the subplot widths being separated. - - -## *************************************************************************** -## * IMAGES * -## *************************************************************************** -#image.aspect : equal ## {equal, auto} or a number -#image.interpolation : antialiased ## see help(imshow) for options -#image.cmap : viridis ## A colormap name, gray etc... -#image.lut : 256 ## the size of the colormap lookup table -#image.origin : upper ## {lower, upper} -#image.resample : True -#image.composite_image : True ## When True, all the images on a set of axes are - ## combined into a single composite image before - ## saving a figure as a vector graphics file, - ## such as a PDF. - - -## *************************************************************************** -## * CONTOUR PLOTS * -## *************************************************************************** -#contour.negative_linestyle : dashed ## string or on-off ink sequence -#contour.corner_mask : True ## {True, False, legacy} - - -## *************************************************************************** -## * ERRORBAR PLOTS * -## *************************************************************************** -#errorbar.capsize : 0 ## length of end cap on error bars in pixels - - -## *************************************************************************** -## * HISTOGRAM PLOTS * -## *************************************************************************** -#hist.bins : 10 ## The default number of histogram bins or 'auto'. - - -## *************************************************************************** -## * SCATTER PLOTS * -## *************************************************************************** -#scatter.marker : o ## The default marker type for scatter plots. -#scatter.edgecolors : face ## The default edge colors for scatter plots. - - -## *************************************************************************** -## * AGG RENDERING * -## *************************************************************************** -## Warning: experimental, 2008/10/10 -#agg.path.chunksize : 0 ## 0 to disable; values in the range - ## 10000 to 100000 can improve speed slightly - ## and prevent an Agg rendering failure - ## when plotting very large data sets, - ## especially if they are very gappy. - ## It may cause minor artifacts, though. - ## A value of 20000 is probably a good - ## starting point. - - -## *************************************************************************** -## * PATHS * -## *************************************************************************** -#path.simplify : True ## When True, simplify paths by removing "invisible" - ## points to reduce file size and increase rendering - ## speed -#path.simplify_threshold : 0.111111111111 ## The threshold of similarity below - ## which vertices will be removed in - ## the simplification process. -#path.snap : True ## When True, rectilinear axis-aligned paths will be snapped - ## to the nearest pixel when certain criteria are met. - ## When False, paths will never be snapped. -#path.sketch : None ## May be None, or a 3-tuple of the form: - ## (scale, length, randomness). - ## - *scale* is the amplitude of the wiggle - ## perpendicular to the line (in pixels). - ## - *length* is the length of the wiggle along the - ## line (in pixels). - ## - *randomness* is the factor by which the length is - ## randomly scaled. -#path.effects : [] ## - - -## *************************************************************************** -## * SAVING FIGURES * -## *************************************************************************** -## The default savefig params can be different from the display params -## e.g., you may want a higher resolution, or to make the figure -## background white -#savefig.dpi : figure ## figure dots per inch or 'figure' -#savefig.facecolor : white ## figure facecolor when saving -#savefig.edgecolor : white ## figure edgecolor when saving -#savefig.format : png ## {png, ps, pdf, svg} -#savefig.bbox : standard ## {tight, standard} - ## 'tight' is incompatible with pipe-based animation - ## backends but will workd with temporary file based ones: - ## e.g. setting animation.writer to ffmpeg will not work, - ## use ffmpeg_file instead -#savefig.pad_inches : 0.1 ## Padding to be used when bbox is set to 'tight' -#savefig.jpeg_quality : 95 ## when a jpeg is saved, the default quality parameter. -#savefig.directory : ~ ## default directory in savefig dialog box, - ## leave empty to always use current working directory -#savefig.transparent : False ## setting that controls whether figures are saved with a - ## transparent background by default -#savefig.orientation : portrait ## Orientation of saved figure - -### tk backend params -#tk.window_focus : False ## Maintain shell focus for TkAgg - -### ps backend params -#ps.papersize : letter ## {auto, letter, legal, ledger, A0-A10, B0-B10} -#ps.useafm : False ## use of afm fonts, results in small files -#ps.usedistiller : False ## {ghostscript, xpdf, None} - ## Experimental: may produce smaller files. - ## xpdf intended for production of publication quality files, - ## but requires ghostscript, xpdf and ps2eps -#ps.distiller.res : 6000 ## dpi -#ps.fonttype : 3 ## Output Type 3 (Type3) or Type 42 (TrueType) - -### PDF backend params -#pdf.compression : 6 ## integer from 0 to 9 - ## 0 disables compression (good for debugging) -#pdf.fonttype : 3 ## Output Type 3 (Type3) or Type 42 (TrueType) -#pdf.use14corefonts : False -#pdf.inheritcolor : False - -### SVG backend params -#svg.image_inline : True ## Write raster image data directly into the SVG file -#svg.fonttype : path ## How to handle SVG fonts: - ## path: Embed characters as paths -- supported - ## by most SVG renderers - ## None: Assume fonts are installed on the - ## machine where the SVG will be viewed. -#svg.hashsalt : None ## If not None, use this string as hash salt instead of uuid4 - -### pgf parameter -## See https://matplotlib.org/tutorials/text/pgf.html for more information. -#pgf.rcfonts : True -#pgf.preamble : ## See text.latex.preamble for documentation -#pgf.texsystem : xelatex - -### docstring params -##docstring.hardcopy = False ## set this when you want to generate hardcopy docstring - - -## *************************************************************************** -## * INTERACTIVE KEYMAPS * -## *************************************************************************** -## Event keys to interact with figures/plots via keyboard. -## See https://matplotlib.org/users/navigation_toolbar.html for more details on -## interactive navigation. Customize these settings according to your needs. -## Leave the field(s) empty if you don't need a key-map. (i.e., fullscreen : '') -#keymap.fullscreen : f, ctrl+f ## toggling -#keymap.home : h, r, home ## home or reset mnemonic -#keymap.back : left, c, backspace, MouseButton.BACK ## forward / backward keys -#keymap.forward : right, v, MouseButton.FORWARD ## for quick navigation -#keymap.pan : p ## pan mnemonic -#keymap.zoom : o ## zoom mnemonic -#keymap.save : s, ctrl+s ## saving current figure -#keymap.help : f1 ## display help about active tools -#keymap.quit : ctrl+w, cmd+w, q ## close the current figure -#keymap.quit_all : W, cmd+W, Q ## close all figures -#keymap.grid : g ## switching on/off major grids in current axes -#keymap.grid_minor : G ## switching on/off minor grids in current axes -#keymap.yscale : l ## toggle scaling of y-axes ('log'/'linear') -#keymap.xscale : k, L ## toggle scaling of x-axes ('log'/'linear') -#keymap.all_axes : a ## enable all axes -#keymap.copy : ctrl+c, cmd+c ## Copy figure to clipboard - - -## *************************************************************************** -## * ANIMATION * -## *************************************************************************** -#animation.html : none ## How to display the animation as HTML in - ## the IPython notebook: - ## - 'html5' uses HTML5 video tag - ## - 'jshtml' creates a Javascript animation -#animation.writer : ffmpeg ## MovieWriter 'backend' to use -#animation.codec : h264 ## Codec to use for writing movie -#animation.bitrate : -1 ## Controls size/quality tradeoff for movie. - ## -1 implies let utility auto-determine -#animation.frame_format : png ## Controls frame format used by temp files -#animation.html_args : ## Additional arguments to pass to html writer -#animation.ffmpeg_path : ffmpeg ## Path to ffmpeg binary. Without full path - ## $PATH is searched -#animation.ffmpeg_args : ## Additional arguments to pass to ffmpeg -#animation.avconv_path : avconv ## Path to avconv binary. Without full path - ## $PATH is searched -#animation.avconv_args : ## Additional arguments to pass to avconv -#animation.convert_path : convert ## Path to ImageMagick's convert binary. - ## On Windows use the full path since convert - ## is also the name of a system tool. -#animation.convert_args : ## Additional arguments to pass to convert -#animation.embed_limit : 20.0 ## Limit, in MB, of size of base64 encoded - ## animation in HTML (i.e. IPython notebook) +# The port to use for the web server in the WebAgg backend. +webagg.port : 8988 + +# The address on which the WebAgg web server should be reachable +webagg.address : 127.0.0.1 + +# If webagg.port is unavailable, a number of other random ports will +# be tried until one that is available is found. +webagg.port_retries : 50 + +# When True, open the webbrowser to the plot that is shown +webagg.open_in_browser : True + +# If you are running pyplot inside a GUI and your backend choice +# conflicts, we will automatically try to find a compatible one for +# you if backend_fallback is True +backend_fallback : True + +interactive : False +toolbar : toolbar2 ## {None, toolbar2} +timezone : UTC ## a pytz timezone string, e.g., US/Central or Europe/Paris + +# Where your matplotlib data lives if you installed to a non-default +# location. This is where the matplotlib fonts, bitmaps, etc reside +datapath : /home/jdhunter/mpldata + + +# *************************************************************************** +# * LINES * +# *************************************************************************** +# See https://matplotlib.org/api/artist_api.html#module-matplotlib.lines +# for more information on line properties. +lines.linewidth : 1.5 ## line width in points +lines.linestyle : - ## solid line +lines.color : C0 ## has no affect on plot(); see axes.prop_cycle +lines.marker : None ## the default marker +lines.markerfacecolor : auto ## the default marker face color +lines.markeredgecolor : auto ## the default marker edge color +lines.markeredgewidth : 1.0 ## the line width around the marker symbol +lines.markersize : 6 ## marker size, in points +lines.dash_joinstyle : round ## {miter, round, bevel} +lines.dash_capstyle : butt ## {butt, round, projecting} +lines.solid_joinstyle : round ## {miter, round, bevel} +lines.solid_capstyle : projecting ## {butt, round, projecting} +lines.antialiased : True ## render lines in antialiased (no jaggies) + +# The three standard dash patterns. These are scaled by the linewidth. +lines.dashed_pattern : 3.7, 1.6 +lines.dashdot_pattern : 6.4, 1.6, 1, 1.6 +lines.dotted_pattern : 1, 1.65 +lines.scale_dashes : True + +markers.fillstyle : full ## {full, left, right, bottom, top, none} + + +# *************************************************************************** +# * PATCHES * +# *************************************************************************** +# Patches are graphical objects that fill 2D space, like polygons or circles. +# See https://matplotlib.org/api/artist_api.html#module-matplotlib.patches +# for more information on patch properties. +patch.linewidth : 1 ## edge width in points. +patch.facecolor : C0 +patch.edgecolor : black ## if forced, or patch is not filled +patch.force_edgecolor : False ## True to always use edgecolor +patch.antialiased : True ## render patches in antialiased (no jaggies) + + +# *************************************************************************** +# * HATCHES * +# *************************************************************************** +hatch.color : black +hatch.linewidth : 1.0 + + +# *************************************************************************** +# * BOXPLOT * +# *************************************************************************** +boxplot.notch : False +boxplot.vertical : True +boxplot.whiskers : 1.5 +boxplot.bootstrap : None +boxplot.patchartist : False +boxplot.showmeans : False +boxplot.showcaps : True +boxplot.showbox : True +boxplot.showfliers : True +boxplot.meanline : False + +boxplot.flierprops.color : black +boxplot.flierprops.marker : o +boxplot.flierprops.markerfacecolor : none +boxplot.flierprops.markeredgecolor : black +boxplot.flierprops.markeredgewidth : 1.0 +boxplot.flierprops.markersize : 6 +boxplot.flierprops.linestyle : none +boxplot.flierprops.linewidth : 1.0 + +boxplot.boxprops.color : black +boxplot.boxprops.linewidth : 1.0 +boxplot.boxprops.linestyle : - + +boxplot.whiskerprops.color : black +boxplot.whiskerprops.linewidth : 1.0 +boxplot.whiskerprops.linestyle : - + +boxplot.capprops.color : black +boxplot.capprops.linewidth : 1.0 +boxplot.capprops.linestyle : - + +boxplot.medianprops.color : C1 +boxplot.medianprops.linewidth : 1.0 +boxplot.medianprops.linestyle : - + +boxplot.meanprops.color : C2 +boxplot.meanprops.marker : ^ +boxplot.meanprops.markerfacecolor : C2 +boxplot.meanprops.markeredgecolor : C2 +boxplot.meanprops.markersize : 6 +boxplot.meanprops.linestyle : -- +boxplot.meanprops.linewidth : 1.0 + + +# *************************************************************************** +# * FONT * +# *************************************************************************** +# The font properties used by `text.Text`. +# See https://matplotlib.org/api/font_manager_api.html for more information +# on font properties. The 6 font properties used for font matching are +# given below with their default values. +# +# The font.family property has five values: +# - 'serif' (e.g., Times), +# - 'sans-serif' (e.g., Helvetica), +# - 'cursive' (e.g., Zapf-Chancery), +# - 'fantasy' (e.g., Western), and +# - 'monospace' (e.g., Courier). +# Each of these font families has a default list of font names in decreasing +# order of priority associated with them. When text.usetex is False, +# font.family may also be one or more concrete font names. +# +# The font.style property has three values: normal (or roman), italic +# or oblique. The oblique style will be used for italic, if it is not +# present. +# +# The font.variant property has two values: normal or small-caps. For +# TrueType fonts, which are scalable fonts, small-caps is equivalent +# to using a font size of 'smaller', or about 83%% of the current font +# size. +# +# The font.weight property has effectively 13 values: normal, bold, +# bolder, lighter, 100, 200, 300, ..., 900. Normal is the same as +# 400, and bold is 700. bolder and lighter are relative values with +# respect to the current weight. +# +# The font.stretch property has 11 values: ultra-condensed, +# extra-condensed, condensed, semi-condensed, normal, semi-expanded, +# expanded, extra-expanded, ultra-expanded, wider, and narrower. This +# property is not currently implemented. +# +# The font.size property is the default font size for text, given in pts. +# 10 pt is the standard value. +# +# Note that font.size controls default text sizes. To configure +# special text sizes tick labels, axes, labels, title, etc, see the rc +# settings for axes and ticks. Special text sizes can be defined +# relative to font.size, using the following values: xx-small, x-small, +# small, medium, large, x-large, xx-large, larger, or smaller + +font.family : sans-serif +font.style : normal +font.variant : normal +font.weight : normal +font.stretch : normal +font.size : 10.0 + +font.serif : DejaVu Serif, Bitstream Vera Serif, Computer Modern Roman, New Century Schoolbook, Century Schoolbook L, Utopia, ITC Bookman, Bookman, Nimbus Roman No9 L, Times New Roman, Times, Palatino, Charter, serif +font.sans-serif : DejaVu Sans, Bitstream Vera Sans, Computer Modern Sans Serif, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif +font.cursive : Apple Chancery, Textile, Zapf Chancery, Sand, Script MT, Felipa, cursive +font.fantasy : Comic Sans MS, Chicago, Charcoal, ImpactWestern, Humor Sans, xkcd, fantasy +font.monospace : DejaVu Sans Mono, Bitstream Vera Sans Mono, Computer Modern Typewriter, Andale Mono, Nimbus Mono L, Courier New, Courier, Fixed, Terminal, monospace + + +# *************************************************************************** +# * TEXT * +# *************************************************************************** +# The text properties used by `text.Text`. +# See https://matplotlib.org/api/artist_api.html#module-matplotlib.text +# for more information on text properties +text.color : black + + +# *************************************************************************** +# * LaTeX * +# *************************************************************************** +# See following links for more information on LaTex properties: +# https://matplotlib.org/tutorials/text/usetex.html +# https://scipy-cookbook.readthedocs.io/items/idx_matplotlib_typesetting.html +text.usetex : False ## use latex for all text handling. The following fonts + ## are supported through the usual rc parameter settings: + ## new century schoolbook, bookman, times, palatino, + ## zapf chancery, charter, serif, sans-serif, helvetica, + ## avant garde, courier, monospace, computer modern roman, + ## computer modern sans serif, computer modern typewriter + ## If another font is desired which can loaded using the + ## LaTeX \usepackage command, please inquire at the + ## matplotlib mailing list +text.latex.preamble : ## IMPROPER USE OF THIS FEATURE WILL LEAD TO LATEX FAILURES + ## AND IS THEREFORE UNSUPPORTED. PLEASE DO NOT ASK FOR HELP + ## IF THIS FEATURE DOES NOT DO WHAT YOU EXPECT IT TO. + ## text.latex.preamble is a single line of LaTeX code that + ## will be passed on to the LaTeX system. It may contain + ## any code that is valid for the LaTeX "preamble", i.e. + ## between the "\documentclass" and "\begin{document}" + ## statements. + ## Note that it has to be put on a single line, which may + ## become quite long. + ## The following packages are always loaded with usetex, so + ## beware of package collisions: color, geometry, graphicx, + ## type1cm, textcomp. + ## Adobe Postscript (PSSNFS) font packages may also be + ## loaded, depending on your font settings. +text.latex.preview : False + +text.hinting : auto ## May be one of the following: + ## - none: Perform no hinting + ## - auto: Use FreeType's autohinter + ## - native: Use the hinting information in the + ## font file, if available, and if your + ## FreeType library supports it + ## - either: Use the native hinting information, + ## or the autohinter if none is available. +text.hinting_factor : 8 ## Specifies the amount of softness for hinting in the + ## horizontal direction. A value of 1 will hint to full + ## pixels. A value of 2 will hint to half pixels etc. +text.antialiased : True ## If True (default), the text will be antialiased. + ## This only affects the Agg backend. + +# The following settings allow you to select the fonts in math mode. +# They map from a TeX font name to a fontconfig font pattern. +# These settings are only used if mathtext.fontset is 'custom'. +# Note that this "custom" mode is unsupported and may go away in the future. +mathtext.cal : cursive +mathtext.rm : sans +mathtext.tt : monospace +mathtext.it : sans:italic +mathtext.bf : sans:bold +mathtext.sf : sans +mathtext.fontset : dejavusans ## Should be 'dejavusans' (default), + ## 'dejavuserif', 'cm' (Computer Modern), 'stix', + ## 'stixsans' or 'custom' +mathtext.fallback_to_cm : True ## When True, use symbols from the Computer Modern + ## fonts when a symbol can not be found in one of + ## the custom math fonts. +mathtext.default : it ## The default font to use for math. + ## Can be any of the LaTeX font names, including + ## the special name "regular" for the same font + ## used in regular text. + + +# *************************************************************************** +# * AXES * +# *************************************************************************** +# Following are default face and edge colors, default tick sizes, +# default fontsizes for ticklabels, and so on. See +# https://matplotlib.org/api/axes_api.html#module-matplotlib.axes +axes.facecolor : white ## axes background color +axes.edgecolor : black ## axes edge color +axes.linewidth : 0.8 ## edge linewidth +axes.grid : False ## display grid or not +axes.grid.axis : both ## which axis the grid should apply to +axes.grid.which : major ## gridlines at {major, minor, both} ticks +axes.titlelocation : center ## alignment of the title: {left, right, center} +axes.titlesize : large ## fontsize of the axes title +axes.titleweight : normal ## font weight of title +axes.titlecolor : auto ## color of the axes title, auto falls back to text.color + ## as default value +axes.titlepad : 6.0 ## pad between axes and title in points +axes.labelsize : medium ## fontsize of the x any y labels +axes.labelpad : 4.0 ## space between label and axis +axes.labelweight : normal ## weight of the x and y labels +axes.labelcolor : black +axes.axisbelow : line ## draw axis gridlines and ticks: + ## - below patches (True) + ## - above patches but below lines ('line') + ## - above all (False) + +axes.formatter.limits : -7, 7 ## use scientific notation if log10 + ## of the axis range is smaller than the + ## first or larger than the second +axes.formatter.use_locale : False ## When True, format tick labels + ## according to the user's locale. + ## For example, use ',' as a decimal + ## separator in the fr_FR locale. +axes.formatter.use_mathtext : False ## When True, use mathtext for scientific + ## notation. +axes.formatter.min_exponent : 0 ## minimum exponent to format in scientific notation +axes.formatter.useoffset : True ## If True, the tick label formatter + ## will default to labeling ticks relative + ## to an offset when the data range is + ## small compared to the minimum absolute + ## value of the data. +axes.formatter.offset_threshold : 4 ## When useoffset is True, the offset + ## will be used when it can remove + ## at least this number of significant + ## digits from tick labels. + +axes.spines.left : True ## display axis spines +axes.spines.bottom : True +axes.spines.top : True +axes.spines.right : True + +axes.unicode_minus : True ## use Unicode for the minus symbol + ## rather than hyphen. See + ## https://en.wikipedia.org/wiki/Plus_and_minus_signs#Character_codes +axes.prop_cycle : cycler('color', ['1f77b4', 'ff7f0e', '2ca02c', 'd62728', '9467bd', '8c564b', 'e377c2', '7f7f7f', 'bcbd22', '17becf']) + ## color cycle for plot lines as list of string colorspecs: + ## single letter, long name, or web-style hex + ## As opposed to all other paramters in this file, the color + ## values must be enclosed in quotes for this parameter, + # e.g. '1f77b4', instead of 1f77b4. + ## See also https://matplotlib.org/tutorials/intermediate/color_cycle.html + ## for more details on prop_cycle usage. +axes.autolimit_mode : data ## How to scale axes limits to the data. By using: + ## - "data" to use data limits, plus some margin + ## - "round_numbers" move to the nearest "round" number +axes.xmargin : .05 ## x margin. See `axes.Axes.margins` +axes.ymargin : .05 ## y margin. See `axes.Axes.margins` +polaraxes.grid : True ## display grid on polar axes +axes3d.grid : True ## display grid on 3d axes + + +# *************************************************************************** +# * DATES * +# *************************************************************************** +# These control the default format strings used in AutoDateFormatter. +# Any valid format datetime format string can be used (see the python +# `datetime` for details). For example, by using: +# - '%%x' will use the locale date representation +# - '%%X' will use the locale time representation +# - '%%c' will use the full locale datetime representation +# These values map to the scales: +# {'year': 365, 'month': 30, 'day': 1, 'hour': 1/24, 'minute': 1 / (24 * 60)} + +date.autoformatter.year : %Y +date.autoformatter.month : %Y-%m +date.autoformatter.day : %Y-%m-%d +date.autoformatter.hour : %m-%d %H +date.autoformatter.minute : %d %H:%M +date.autoformatter.second : %H:%M:%S +date.autoformatter.microsecond : %M:%S.%f + + +# *************************************************************************** +# * TICKS * +# *************************************************************************** +# See https://matplotlib.org/api/axis_api.html#matplotlib.axis.Tick +xtick.top : False ## draw ticks on the top side +xtick.bottom : True ## draw ticks on the bottom side +xtick.labeltop : False ## draw label on the top +xtick.labelbottom : True ## draw label on the bottom +xtick.major.size : 3.5 ## major tick size in points +xtick.minor.size : 2 ## minor tick size in points +xtick.major.width : 0.8 ## major tick width in points +xtick.minor.width : 0.6 ## minor tick width in points +xtick.major.pad : 3.5 ## distance to major tick label in points +xtick.minor.pad : 3.4 ## distance to the minor tick label in points +xtick.color : black ## color of the tick labels +xtick.labelsize : medium ## fontsize of the tick labels +xtick.direction : out ## direction: {in, out, inout} +xtick.minor.visible : False ## visibility of minor ticks on x-axis +xtick.major.top : True ## draw x axis top major ticks +xtick.major.bottom : True ## draw x axis bottom major ticks +xtick.minor.top : True ## draw x axis top minor ticks +xtick.minor.bottom : True ## draw x axis bottom minor ticks +xtick.alignment : center ## alignment of xticks + +ytick.left : True ## draw ticks on the left side +ytick.right : False ## draw ticks on the right side +ytick.labelleft : True ## draw tick labels on the left side +ytick.labelright : False ## draw tick labels on the right side +ytick.major.size : 3.5 ## major tick size in points +ytick.minor.size : 2 ## minor tick size in points +ytick.major.width : 0.8 ## major tick width in points +ytick.minor.width : 0.6 ## minor tick width in points +ytick.major.pad : 3.5 ## distance to major tick label in points +ytick.minor.pad : 3.4 ## distance to the minor tick label in points +ytick.color : black ## color of the tick labels +ytick.labelsize : medium ## fontsize of the tick labels +ytick.direction : out ## direction: {in, out, inout} +ytick.minor.visible : False ## visibility of minor ticks on y-axis +ytick.major.left : True ## draw y axis left major ticks +ytick.major.right : True ## draw y axis right major ticks +ytick.minor.left : True ## draw y axis left minor ticks +ytick.minor.right : True ## draw y axis right minor ticks +ytick.alignment : center_baseline ## alignment of yticks + + +# *************************************************************************** +# * GRIDS * +# *************************************************************************** +grid.color : b0b0b0 ## grid color +grid.linestyle : - ## solid +grid.linewidth : 0.8 ## in points +grid.alpha : 1.0 ## transparency, between 0.0 and 1.0 + + +# *************************************************************************** +# * LEGEND * +# *************************************************************************** +legend.loc : best +legend.frameon : True ## if True, draw the legend on a background patch +legend.framealpha : 0.8 ## legend patch transparency +legend.facecolor : inherit ## inherit from axes.facecolor; or color spec +legend.edgecolor : 0.8 ## background patch boundary color +legend.fancybox : True ## if True, use a rounded box for the + ## legend background, else a rectangle +legend.shadow : False ## if True, give background a shadow effect +legend.numpoints : 1 ## the number of marker points in the legend line +legend.scatterpoints : 1 ## number of scatter points +legend.markerscale : 1.0 ## the relative size of legend markers vs. original +legend.fontsize : medium +legend.title_fontsize : None ## None sets to the same as the default axes. + +# Dimensions as fraction of fontsize: +legend.borderpad : 0.4 ## border whitespace +legend.labelspacing : 0.5 ## the vertical space between the legend entries +legend.handlelength : 2.0 ## the length of the legend lines +legend.handleheight : 0.7 ## the height of the legend handle +legend.handletextpad : 0.8 ## the space between the legend line and legend text +legend.borderaxespad : 0.5 ## the border between the axes and legend edge +legend.columnspacing : 2.0 ## column separation + + +# *************************************************************************** +# * FIGURE * +# *************************************************************************** +# See https://matplotlib.org/api/figure_api.html#matplotlib.figure.Figure +figure.titlesize : large ## size of the figure title (``Figure.suptitle()``) +figure.titleweight : normal ## weight of the figure title +figure.figsize : 6.4, 4.8 ## figure size in inches +figure.dpi : 100 ## figure dots per inch +figure.facecolor : white ## figure facecolor +figure.edgecolor : white ## figure edgecolor +figure.frameon : True ## enable figure frame +figure.max_open_warning : 20 ## The maximum number of figures to open through + ## the pyplot interface before emitting a warning. + ## If less than one this feature is disabled. + +# The figure subplot parameters. All dimensions are a fraction of the figure width and height. +figure.subplot.left : 0.125 ## the left side of the subplots of the figure +figure.subplot.right : 0.9 ## the right side of the subplots of the figure +figure.subplot.bottom : 0.11 ## the bottom of the subplots of the figure +figure.subplot.top : 0.88 ## the top of the subplots of the figure +figure.subplot.wspace : 0.2 ## the amount of width reserved for space between subplots, + ## expressed as a fraction of the average axis width +figure.subplot.hspace : 0.2 ## the amount of height reserved for space between subplots, + ## expressed as a fraction of the average axis height + +# Figure layout +figure.autolayout : False ## When True, automatically adjust subplot + ## parameters to make the plot fit the figure + ## using `tight_layout` +figure.constrained_layout.use : False ## When True, automatically make plot + ## elements fit on the figure. (Not + ## compatible with `autolayout`, above). +figure.constrained_layout.h_pad : 0.04167 ## Padding around axes objects. Float representing +figure.constrained_layout.w_pad : 0.04167 ## inches. Default is 3./72. inches (3 pts) +figure.constrained_layout.hspace : 0.02 ## Space between subplot groups. Float representing +figure.constrained_layout.wspace : 0.02 ## a fraction of the subplot widths being separated. + + +# *************************************************************************** +# * IMAGES * +# *************************************************************************** +image.aspect : equal ## {equal, auto} or a number +image.interpolation : antialiased ## see help(imshow) for options +image.cmap : viridis ## A colormap name, gray etc... +image.lut : 256 ## the size of the colormap lookup table +image.origin : upper ## {lower, upper} +image.resample : True +image.composite_image : True ## When True, all the images on a set of axes are + ## combined into a single composite image before + ## saving a figure as a vector graphics file, + ## such as a PDF. + + +# *************************************************************************** +# * CONTOUR PLOTS * +# *************************************************************************** +contour.negative_linestyle : dashed ## string or on-off ink sequence +contour.corner_mask : True ## {True, False, legacy} + + +# *************************************************************************** +# * ERRORBAR PLOTS * +# *************************************************************************** +errorbar.capsize : 0 ## length of end cap on error bars in pixels + + +# *************************************************************************** +# * HISTOGRAM PLOTS * +# *************************************************************************** +hist.bins : 10 ## The default number of histogram bins or 'auto'. + + +# *************************************************************************** +# * SCATTER PLOTS * +# *************************************************************************** +scatter.marker : o ## The default marker type for scatter plots. +scatter.edgecolors : face ## The default edge colors for scatter plots. + + +# *************************************************************************** +# * AGG RENDERING * +# *************************************************************************** +# Warning: experimental, 2008/10/10 +agg.path.chunksize : 0 ## 0 to disable; values in the range + ## 10000 to 100000 can improve speed slightly + ## and prevent an Agg rendering failure + ## when plotting very large data sets, + ## especially if they are very gappy. + ## It may cause minor artifacts, though. + ## A value of 20000 is probably a good + ## starting point. + + +# *************************************************************************** +# * PATHS * +# *************************************************************************** +path.simplify : True ## When True, simplify paths by removing "invisible" + ## points to reduce file size and increase rendering + ## speed +path.simplify_threshold : 0.111111111111 ## The threshold of similarity below + ## which vertices will be removed in + ## the simplification process. +path.snap : True ## When True, rectilinear axis-aligned paths will be snapped + ## to the nearest pixel when certain criteria are met. + ## When False, paths will never be snapped. +path.sketch : None ## May be None, or a 3-tuple of the form: + ## (scale, length, randomness). + ## - *scale* is the amplitude of the wiggle + ## perpendicular to the line (in pixels). + ## - *length* is the length of the wiggle along the + ## line (in pixels). + ## - *randomness* is the factor by which the length is + ## randomly scaled. +path.effects : ## + + +# *************************************************************************** +# * SAVING FIGURES * +# *************************************************************************** +# The default savefig params can be different from the display params +# e.g., you may want a higher resolution, or to make the figure +# background white +savefig.dpi : figure ## figure dots per inch or 'figure' +savefig.facecolor : white ## figure facecolor when saving +savefig.edgecolor : white ## figure edgecolor when saving +savefig.format : png ## {png, ps, pdf, svg} +savefig.bbox : standard ## {tight, standard} + ## 'tight' is incompatible with pipe-based animation + ## backends but will workd with temporary file based ones: + ## e.g. setting animation.writer to ffmpeg will not work, + ## use ffmpeg_file instead +savefig.pad_inches : 0.1 ## Padding to be used when bbox is set to 'tight' +savefig.jpeg_quality : 95 ## when a jpeg is saved, the default quality parameter. +savefig.directory : ~ ## default directory in savefig dialog box, + ## leave empty to always use current working directory +savefig.transparent : False ## setting that controls whether figures are saved with a + ## transparent background by default +savefig.orientation : portrait ## Orientation of saved figure + +## tk backend params +tk.window_focus : False ## Maintain shell focus for TkAgg + +## ps backend params +ps.papersize : letter ## {auto, letter, legal, ledger, A0-A10, B0-B10} +ps.useafm : False ## use of afm fonts, results in small files +ps.usedistiller : False ## {ghostscript, xpdf, None} + ## Experimental: may produce smaller files. + ## xpdf intended for production of publication quality files, + ## but requires ghostscript, xpdf and ps2eps +ps.distiller.res : 6000 ## dpi +ps.fonttype : 3 ## Output Type 3 (Type3) or Type 42 (TrueType) + +## PDF backend params +pdf.compression : 6 ## integer from 0 to 9 + ## 0 disables compression (good for debugging) +pdf.fonttype : 3 ## Output Type 3 (Type3) or Type 42 (TrueType) +pdf.use14corefonts : False +pdf.inheritcolor : False + +## SVG backend params +svg.image_inline : True ## Write raster image data directly into the SVG file +svg.fonttype : path ## How to handle SVG fonts: + ## path: Embed characters as paths -- supported + ## by most SVG renderers + ## None: Assume fonts are installed on the + ## machine where the SVG will be viewed. +svg.hashsalt : None ## If not None, use this string as hash salt instead of uuid4 + +## pgf parameter +# See https://matplotlib.org/tutorials/text/pgf.html for more information. +pgf.rcfonts : True +pgf.preamble : ## See text.latex.preamble for documentation +pgf.texsystem : xelatex + +## docstring params +docstring.hardcopy: False ## set this when you want to generate hardcopy docstring + + +# *************************************************************************** +# * INTERACTIVE KEYMAPS * +# *************************************************************************** +# Event keys to interact with figures/plots via keyboard. +# See https://matplotlib.org/users/navigation_toolbar.html for more details on +# interactive navigation. Customize these settings according to your needs. +# Leave the field(s) empty if you don't need a key-map. (i.e., fullscreen : '') +keymap.fullscreen : f, ctrl+f ## toggling +keymap.home : h, r, home ## home or reset mnemonic +keymap.back : left, c, backspace, MouseButton.BACK ## forward / backward keys +keymap.forward : right, v, MouseButton.FORWARD ## for quick navigation +keymap.pan : p ## pan mnemonic +keymap.zoom : o ## zoom mnemonic +keymap.save : s, ctrl+s ## saving current figure +keymap.help : f1 ## display help about active tools +keymap.quit : ctrl+w, cmd+w, q ## close the current figure +keymap.quit_all : W, cmd+W, Q ## close all figures +keymap.grid : g ## switching on/off major grids in current axes +keymap.grid_minor : G ## switching on/off minor grids in current axes +keymap.yscale : l ## toggle scaling of y-axes ('log'/'linear') +keymap.xscale : k, L ## toggle scaling of x-axes ('log'/'linear') +keymap.all_axes : a ## enable all axes +keymap.copy : ctrl+c, cmd+c ## Copy figure to clipboard + + +# *************************************************************************** +# * ANIMATION * +# *************************************************************************** +animation.html : none ## How to display the animation as HTML in + ## the IPython notebook: + ## - 'html5' uses HTML5 video tag + ## - 'jshtml' creates a Javascript animation +animation.writer : ffmpeg ## MovieWriter 'backend' to use +animation.codec : h264 ## Codec to use for writing movie +animation.bitrate : -1 ## Controls size/quality tradeoff for movie. + ## -1 implies let utility auto-determine +animation.frame_format : png ## Controls frame format used by temp files +animation.html_args : ## Additional arguments to pass to html writer +animation.ffmpeg_path : ffmpeg ## Path to ffmpeg binary. Without full path + ## $PATH is searched +animation.ffmpeg_args : ## Additional arguments to pass to ffmpeg +animation.avconv_path : avconv ## Path to avconv binary. Without full path + ## $PATH is searched +animation.avconv_args : ## Additional arguments to pass to avconv +animation.convert_path : convert ## Path to ImageMagick's convert binary. + ## On Windows use the full path since convert + ## is also the name of a system tool. +animation.convert_args : ## Additional arguments to pass to convert +animation.embed_limit : 20.0 ## Limit, in MB, of size of base64 encoded + ## animation in HTML (i.e. IPython notebook)