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)