Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Saving the maplotlib parameters into a mplstyles file automatically

When creating custom matplotlib styles, you can access the contributing parameters to your current style by printing plt.rcParams. How do I convert these automatically into a mplstyles file?

import matplotlib.pyplot as plt
plt.rcParams

prints:

RcParams({'_internal.classic_mode': False,
      'agg.path.chunksize': 0,
      'animation.avconv_args': [],
      'animation.avconv_path': 'avconv',
      'animation.bitrate': -1,
      'animation.codec': 'h264',
      'animation.convert_args': [],
      'animation.convert_path': 'convert',
      'animation.embed_limit': 20.0,
      'animation.ffmpeg_args': [],
      'animation.ffmpeg_path': 'ffmpeg',
      'animation.frame_format': 'png',
      'animation.html': 'none',
      'animation.html_args': [],
      'animation.writer': 'ffmpeg',
      'axes.autolimit_mode': 'data',
      'axes.axisbelow': True,
      'axes.edgecolor': u'.15',
      'axes.facecolor': u'white',
      'axes.formatter.limits': [-7, 7],
      'axes.formatter.min_exponent': 0,
      'axes.formatter.offset_threshold': 4,
      'axes.formatter.use_locale': False,
      'axes.formatter.use_mathtext': False,
      'axes.formatter.useoffset': True,
      'axes.grid': True,
      'axes.grid.axis': 'both',
      'axes.grid.which': 'major',
      'axes.hold': None,
      'axes.labelcolor': u'.15',
      'axes.labelpad': 4.0,
      'axes.labelsize': 'medium',
      'axes.labelweight': 'normal',
      'axes.linewidth': 1.0,
      'axes.prop_cycle': cycler('color', ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd', '#8c564b', '#e377c2', '#7f7f7f', '#bcbd22', '#17becf']),
      'axes.spines.bottom': True,
      'axes.spines.left': True,
      'axes.spines.right': True,
      'axes.spines.top': True,
      'axes.titlepad': 6.0,
      'axes.titlesize': 'large',
      'axes.titleweight': 'normal',
      'axes.unicode_minus': True,
      'axes.xmargin': 0.05,
      'axes.ymargin': 0.05,
      'axes3d.grid': True,
      'backend': 'module://ipykernel.pylab.backend_inline',
      'backend.qt4': None,
      'backend.qt5': None,
      'backend_fallback': True,
      'boxplot.bootstrap': None,
      'boxplot.boxprops.color': 'k',
      'boxplot.boxprops.linestyle': '-',
      'boxplot.boxprops.linewidth': 1.0,
      'boxplot.capprops.color': 'k',
      'boxplot.capprops.linestyle': '-',
      'boxplot.capprops.linewidth': 1.0,
      'boxplot.flierprops.color': 'k',
      'boxplot.flierprops.linestyle': 'none',
      'boxplot.flierprops.linewidth': 1.0,
      'boxplot.flierprops.marker': 'o',
      'boxplot.flierprops.markeredgecolor': 'k',
      'boxplot.flierprops.markerfacecolor': 'none',
      'boxplot.flierprops.markersize': 6.0,
      'boxplot.meanline': False,
      'boxplot.meanprops.color': 'C2',
      'boxplot.meanprops.linestyle': '--',
      'boxplot.meanprops.linewidth': 1.0,
      'boxplot.meanprops.marker': '^',
      'boxplot.meanprops.markeredgecolor': 'C2',
      'boxplot.meanprops.markerfacecolor': 'C2',
      'boxplot.meanprops.markersize': 6.0,
      'boxplot.medianprops.color': 'C1',
      'boxplot.medianprops.linestyle': '-',
      'boxplot.medianprops.linewidth': 1.0,
      'boxplot.notch': False,
      'boxplot.patchartist': False,
      'boxplot.showbox': True,
      'boxplot.showcaps': True,
      'boxplot.showfliers': True,
      'boxplot.showmeans': False,
      'boxplot.vertical': True,
      'boxplot.whiskerprops.color': 'k',
      'boxplot.whiskerprops.linestyle': '-',
      'boxplot.whiskerprops.linewidth': 1.0,
      'boxplot.whiskers': 1.5,
      'contour.corner_mask': True,
      'contour.negative_linestyle': 'dashed',
      'datapath': '/home/codepan1/virtual_env/local/lib/python2.7/site-packages/matplotlib/mpl-data',
      'date.autoformatter.day': '%Y-%m-%d',
      'date.autoformatter.hour': '%m-%d %H',
      'date.autoformatter.microsecond': '%M:%S.%f',
      'date.autoformatter.minute': '%d %H:%M',
      'date.autoformatter.month': '%Y-%m',
      'date.autoformatter.second': '%H:%M:%S',
      'date.autoformatter.year': '%Y',
      'docstring.hardcopy': False,
      'errorbar.capsize': 0.0,
      'examples.directory': '',
      'figure.autolayout': False,
      'figure.constrained_layout.h_pad': 0.04167,
      'figure.constrained_layout.hspace': 0.02,
      'figure.constrained_layout.use': False,
      'figure.constrained_layout.w_pad': 0.04167,
      'figure.constrained_layout.wspace': 0.02,
      'figure.dpi': 72.0,
      'figure.edgecolor': (1, 1, 1, 0),
      'figure.facecolor': (1, 1, 1, 0),
      'figure.figsize': [6.0, 4.0],
      'figure.frameon': True,
      'figure.max_open_warning': 20,
      'figure.subplot.bottom': 0.125,
      'figure.subplot.hspace': 0.2,
      'figure.subplot.left': 0.125,
      'figure.subplot.right': 0.9,
      'figure.subplot.top': 0.88,
      'figure.subplot.wspace': 0.2,
      'figure.titlesize': 'large',
      'figure.titleweight': 'normal',
      'font.cursive': ['Apple Chancery',
                       'Textile',
                       'Zapf Chancery',
                       'Sand',
                       'Script MT',
                       'Felipa',
                       'cursive'],
      'font.family': ['Quicksand'],
      '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'],
      'font.sans-serif': ['Arial',
                          'Liberation Sans',
                          'DejaVu Sans',
                          'Bitstream Vera Sans',
                          'sans-serif'],
      '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.size': 10.0,
      'font.stretch': 'normal',
      'font.style': 'normal',
      'font.variant': 'normal',
      'font.weight': 'bold',
      'grid.alpha': 1.0,
      'grid.color': u'.8',
      'grid.linestyle': '-',
      'grid.linewidth': 0.8,
      'hatch.color': 'k',
      'hatch.linewidth': 1.0,
      'hist.bins': 10,
      'image.aspect': 'equal',
      'image.cmap': u'Greys',
      'image.composite_image': True,
      'image.interpolation': 'nearest',
      'image.lut': 256,
      'image.origin': 'upper',
      'image.resample': True,
      'interactive': True,
      'keymap.all_axes': ['a'],
      'keymap.back': ['left', 'c', 'backspace'],
      'keymap.forward': ['right', 'v'],
      'keymap.fullscreen': ['f', 'ctrl+f'],
      'keymap.grid': ['g'],
      'keymap.grid_minor': ['G'],
      'keymap.home': ['h', 'r', 'home'],
      'keymap.pan': ['p'],
      'keymap.quit': ['ctrl+w', 'cmd+w', 'q'],
      'keymap.quit_all': ['W', 'cmd+W', 'Q'],
      'keymap.save': ['s', 'ctrl+s'],
      'keymap.xscale': ['k', 'L'],
      'keymap.yscale': ['l'],
      'keymap.zoom': ['o'],
      'legend.borderaxespad': 0.5,
      'legend.borderpad': 0.4,
      'legend.columnspacing': 2.0,
      'legend.edgecolor': '0.8',
      'legend.facecolor': 'inherit',
      'legend.fancybox': True,
      'legend.fontsize': 'medium',
      'legend.framealpha': 0.8,
      'legend.frameon': False,
      'legend.handleheight': 0.7,
      'legend.handlelength': 2.0,
      'legend.handletextpad': 0.8,
      'legend.labelspacing': 0.5,
      'legend.loc': 'best',
      'legend.markerscale': 1.0,
      'legend.numpoints': 1,
      'legend.scatterpoints': 1,
      'legend.shadow': False,
      'lines.antialiased': True,
      'lines.color': 'C0',
      'lines.dash_capstyle': 'butt',
      'lines.dash_joinstyle': 'round',
      'lines.dashdot_pattern': [6.4, 1.6, 1.0, 1.6],
      'lines.dashed_pattern': [3.7, 1.6],
      'lines.dotted_pattern': [1.0, 1.65],
      'lines.linestyle': '-',
      'lines.linewidth': 1.5,
      'lines.marker': 'None',
      'lines.markeredgewidth': 1.0,
      'lines.markersize': 50.0,
      'lines.scale_dashes': True,
      'lines.solid_capstyle': 'round',
      'lines.solid_joinstyle': 'round',
      'markers.fillstyle': 'full',
      'mathtext.bf': 'sans:bold',
      'mathtext.cal': 'cursive',
      'mathtext.default': 'it',
      'mathtext.fallback_to_cm': True,
      'mathtext.fontset': 'dejavusans',
      'mathtext.it': 'sans:italic',
      'mathtext.rm': 'sans',
      'mathtext.sf': 'sans',
      'mathtext.tt': 'monospace',
      'patch.antialiased': True,
      'patch.edgecolor': 'k',
      'patch.facecolor': 'C0',
      'patch.force_edgecolor': False,
      'patch.linewidth': 1.0,
      'path.effects': [],
      'path.simplify': True,
      'path.simplify_threshold': 0.1111111111111111,
      'path.sketch': None,
      'path.snap': True,
      'pdf.compression': 6,
      'pdf.fonttype': 3,
      'pdf.inheritcolor': False,
      'pdf.use14corefonts': False,
      'pgf.debug': False,
      'pgf.preamble': [],
      'pgf.rcfonts': True,
      'pgf.texsystem': 'xelatex',
      'polaraxes.grid': True,
      'ps.distiller.res': 6000,
      'ps.fonttype': 3,
      'ps.papersize': 'letter',
      'ps.useafm': False,
      'ps.usedistiller': False,
      'savefig.bbox': None,
      'savefig.directory': '~',
      'savefig.dpi': 'figure',
      'savefig.edgecolor': 'w',
      'savefig.facecolor': 'w',
      'savefig.format': 'png',
      'savefig.frameon': True,
      'savefig.jpeg_quality': 95,
      'savefig.orientation': 'portrait',
      'savefig.pad_inches': 0.1,
      'savefig.transparent': False,
      'scatter.marker': 'o',
      'svg.fonttype': 'path',
      'svg.hashsalt': None,
      'svg.image_inline': True,
      'text.antialiased': True,
      'text.color': u'.15',
      'text.hinting': 'auto',
      'text.hinting_factor': 8,
      'text.latex.preamble': [],
      'text.latex.preview': False,
      'text.latex.unicode': False,
      'text.usetex': False,
      'timezone': 'UTC',
      'tk.window_focus': False,
      'toolbar': 'toolbar2',
      'verbose.fileo': 'sys.stdout',
      'verbose.level': 'silent',
      'webagg.address': '127.0.0.1',
      'webagg.open_in_browser': True,
      'webagg.port': 8988,
      'webagg.port_retries': 50,
      'xtick.alignment': 'center',
      'xtick.bottom': True,
      'xtick.color': u'.15',
      'xtick.direction': u'out',
      'xtick.labelbottom': True,
      'xtick.labelsize': 'medium',
      'xtick.labeltop': False,
      'xtick.major.bottom': True,
      'xtick.major.pad': 3.5,
      'xtick.major.size': 6.0,
      'xtick.major.top': True,
      'xtick.major.width': 0.8,
      'xtick.minor.bottom': True,
      'xtick.minor.pad': 3.4,
      'xtick.minor.size': 3.0,
      'xtick.minor.top': True,
      'xtick.minor.visible': False,
      'xtick.minor.width': 0.6,
      'xtick.top': False,
      'ytick.alignment': 'center_baseline',
      'ytick.color': u'.15',
      'ytick.direction': u'out',
      'ytick.labelleft': True,
      'ytick.labelright': False,
      'ytick.labelsize': 'medium',
      'ytick.left': True,
      'ytick.major.left': True,
      'ytick.major.pad': 3.5,
      'ytick.major.right': True,
      'ytick.major.size': 6.0,
      'ytick.major.width': 0.8,
      'ytick.minor.left': True,
      'ytick.minor.pad': 3.4,
      'ytick.minor.right': True,
      'ytick.minor.size': 3.0,
      'ytick.minor.visible': False,
      'ytick.minor.width': 0.6,
      'ytick.right': False})

This is as far as I've got to formatting it correctly (still contains some brackets and string indicators:

dict_list = []
for i,j in plt.rcParams.items():
    dict_list.append (i + " : " + str(j))

for elem in dict_list:
    elem = elem.replace("[]","")
    elem = elem.replace("None","")
    print(str(elem))

Further information about the styles can be found here

like image 303
William Baker Morrison Avatar asked Sep 19 '25 17:09

William Baker Morrison


1 Answers

Interesting question. There are some pitfalls when trying to convert the rcParams into a .mplstyle file.

So if this question is rather how to produce a mplstyle file with all parameters in it, I would consider the following solution.

Read in the matplotlibrc.template file from your matplotlib installation and convert it to a valid rc file. This works in matplotlib 2.2.0 or higher, because I only recently added the requirement for the strict format of this template.

import matplotlib as mpl

path_to_rc = mpl.matplotlib_fname()
with open(path_to_rc, "r") as f:
    rclines = f.readlines()
newlines = []
for line in rclines:
    if line[0] == "#":
        newline = line[1:]
    else:
        newline = line
    if "$TEMPLATE_BACKEND" in newline:
        newline = "backend : "+mpl.rcParams["backend"]
    if "datapath" in newline:
        newline = ""
    newlines.append(newline)

with open("mynewstyle.mplstyle", "w") as f:
    f.writelines(newlines)

The resulting file will basically look like the template file, except that all parameters are uncommented such that it can be used as .mplstyle.

like image 61
ImportanceOfBeingErnest Avatar answered Sep 22 '25 07:09

ImportanceOfBeingErnest