#!/usr/bin/env python #[TLP:CLEAR] UNLIMITED DISTRIBUTION """ manchot_plot.py @ Author: Moussouni, Yaël (PhD student; yael.moussouni@astro.unistra.fr) @ Institution: Université de Strasbourg, CNRS, Observatoire astronomique de Strasbourg, UMR 7550, F-67000 Strasbourg, France @ Date: 2025-11-21 Licence: Python Matplotlib Style Copyright (C) 2026 Yaël Moussouni (yael.moussouni@astro.unistra.fr) manchot_plot.py Copyright (C) 2026 Yaël Moussouni (yael.moussouni@astro.unistra.fr) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see www.gnu.org/licenses/. """ import os import matplotlib as mpl import numpy as np import colours as c import matplotlib.pyplot as plt from cycler import cycler cm = 0.3937 # in/cm class ManchotRC: def __init__(self): self.context = {} # Paper self.paper = (21*cm, 29.7*cm) self.margin_left = 3*cm self.margin_right = 3*cm self.margin_cols = 0*cm self.n_cols = 1 self.aspect = 3/2 self.page_linewidth = (self.paper[0] - self.margin_left - self.margin_right) self.page_textwidth = self.page_linewidth/self.n_cols - self.margin_cols*(self.n_cols - 1) # Global parameters self.linewidth = 2 self.markersize = 3 self.pad = 3.5 self.joinstyle = "round" self.fig_x = self.page_textwidth self.fig_y = self.fig_x / self.aspect # Colours self.colour_fg = "#000000" self.colour_bg = "#FFFFFF" self.colours = [c.signal_blue, c.signal_orange, c.signal_green, c.signal_red, c.signal_violet, c.signal_brown, c.signal_pink, c.signal_grey] self.colour_fg_rgb = np.array(mpl.colors.to_rgb(self.colour_fg)) self.colour_bg_rgb = np.array(mpl.colors.to_rgb(self.colour_bg)) self.colour_mg_rgb = np.mean([self.colour_fg_rgb, self.colour_bg_rgb], axis=0) self.colour_mg = mpl.colors.to_hex(self.colour_mg_rgb) self.colour_mbg_rgb = np.mean([self.colour_mg_rgb, self.colour_bg_rgb], axis=0) self.colour_mbg = mpl.colors.to_hex(self.colour_mbg_rgb) self.colour_mfg_rgb = np.mean([self.colour_mg_rgb, self.colour_fg_rgb], axis=0) self.colour_mfg = mpl.colors.to_hex(self.colour_mfg_rgb) # Lines self.lines_linewidth = self.linewidth self.lines_markersize = self.markersize self.lines_linestyle = "-" self.lines_marker = "" self.lines_markeredgewidth = self.linewidth/2 self.lines_dash_joinstyle = self.joinstyle self.lines_dash_capstyle = self.joinstyle self.lines_solid_joinstyle = self.joinstyle self.lines_solid_capstyle = self.joinstyle self.lines_color = self.colours[0] self.lines_markerfacecolor = "auto" self.lines_markeredgecolor = self.lines_markerfacecolor # Patches self.patch_linewidth = self.linewidth self.patch_force_edgecolor = False self.patch_facecolor = self.colours[0] self.patch_edgecolor = self.colour_fg # Hatches self.hatch_linewidth = self.linewidth/2 self.hatch_color = self.colour_fg # Boxplots self.boxplot_notch = False self.boxplot_vertical = True self.boxplot_whiskers = 1.5 self.boxplot_bootstrap = None self.boxplot_patchartist = False self.boxplot_showmeans = True self.boxplot_showcaps = True self.boxplot_showbox = True self.boxplot_showfliers = True self.boxplot_meanline = True self.boxplot_flierprops_marker = "x" self.boxplot_flierprops_markeredgewidth = self.linewidth/2 self.boxplot_flierprops_markersize = self.markersize self.boxplot_flierprops_linestyle = "" self.boxplot_flierprops_linewidth = self.linewidth self.boxplot_boxprops_linewidth = self.linewidth self.boxplot_boxprops_linestyle = "-" self.boxplot_whiskerprops_linewidth = self.boxplot_boxprops_linewidth self.boxplot_whiskerprops_linestyle = self.boxplot_boxprops_linestyle self.boxplot_capprops_linewidth = self.boxplot_boxprops_linewidth self.boxplot_capprops_linestyle = self.boxplot_boxprops_linestyle self.boxplot_medianprops_linewidth = self.boxplot_boxprops_linewidth self.boxplot_medianprops_linestyle = self.boxplot_boxprops_linestyle self.boxplot_meanprops_marker = "+" self.boxplot_meanprops_markersize = self.markersize self.boxplot_meanprops_linestyle = self.boxplot_boxprops_linestyle self.boxplot_meanprops_linewidth = self.boxplot_boxprops_linewidth self.boxplot_flierprops_color = self.colour_mg self.boxplot_flierprops_markerfacecolor = self.colour_fg self.boxplot_flierprops_markeredgecolor = self.colour_fg self.boxplot_boxprops_color = self.colour_fg self.boxplot_whiskerprops_color = self.boxplot_boxprops_color self.boxplot_capprops_color = self.boxplot_boxprops_color self.boxplot_medianprops_color = self.colours[1] self.boxplot_meanprops_color = self.colours[2] self.boxplot_meanprops_markerfacecolor = self.boxplot_meanprops_color self.boxplot_meanprops_markeredgecolor = self.boxplot_meanprops_color # Font font_list = mpl.font_manager.get_font_names() if "Latin Modern Roman" in font_list : self.font_family = "Latin Modern Roman" elif "Computer Modern Roman" in font_list: self.font_family = "Computer Modern Roman" elif "Times" in font_list: self.font_family = "Computer Modern Roman" else: self.font_family = "serif" self.font_style = "normal" self.font_variant = "normal" self.font_weight = "normal" self.font_stretch = "normal" self.font_size = 10 self.font_serif = ["Computer Modern Roman", "Latin Modern Roman", "Times", "serif"] self.font_sans_serif = ["Computer Modern Sans Serif", "Latin Modern Sans", "Helvetica", "Arial", "sans-serif"] self.font_monospace = ["Computer Modern Typewriter", "Latin Modern Mono", "Courier", "monospace"] # Text / LaTeX self.text_usetex = False self.latex_preamble = "" self.mathtext_fontset = "cm" self.text_color = self.colour_fg # Axes self.axes_linewidth = self.linewidth/2 self.axes_grid = True self.axes_grid_axis = "both" self.axes_grid_which = "major" self.axes_titlelocation = "center" self.axes_titley = None self.axes_titlesize = "medium" self.axes_titleweight = "normal" self.axes_titlepad = self.pad self.axes_labelsize = "medium" self.axes_labelweight = "normal" self.axes_labelpad = self.pad self.axes_axisbelow = True self.axes_facecolor = self.colour_bg self.axes_edgecolor = self.colour_fg self.axes_titlecolor = self.axes_edgecolor self.axes_labelcolor = self.axes_edgecolor self.axes_prop_cycle = cycler(color=self.colours) self.axes_formatter_limits = (-5, 6) self.axes_formatter_use_locale = False self.axes_formatter_use_mathtext = False self.axes_formatter_min_exponent = 0 self.axes_formatter_useoffset = True self.axes_formatter_offset_threshold = 4 self.axes_spines_left = True self.axes_spines_bottom = True self.axes_spines_top = True self.axes_spines_right = True self.axes_unicode_minus = True self.axes_xmargin = 0.05 self.axes_ymargin = 0.05 self.axes_zmargin = 0.05 self.axes_autolimit_mode = "data" self.polaraxes_grid = True self.axes3d_grid = True self.axes3d_automargin = False self.axes3d_xaxis_panecolor = np.concatenate([self.colour_mg_rgb, [0.05]]) self.axes3d_yaxis_panecolor = np.concatenate([self.colour_mg_rgb, [0.10]]) self.axes3d_zaxis_panecolor = np.concatenate([self.colour_mg_rgb, [0.15]]) self.axes3d_mouserotationstyle = "trackball" self.axes3d_trackballsize = 0.667 self.axes3d_trackballborder = 0.2 # Axis self.xaxis_labellocation = "center" self.yaxis_labellocation = "center" # Dates self.date_autoformatter_year = "%Y" self.date_autoformatter_month = "%Y-%m" self.date_autoformatter_day = "%Y-%m-%d" self.date_autoformatter_hour = "%m-%d%H" self.date_autoformatter_minute = "%d%H:%M" self.date_autoformatter_second = "%H:%M:%S" self.date_autoformatter_microsecond = "%M:%S.%f" self.date_converter = "auto" self.date_interval_multiples = True # Ticks self.xtick_top = True self.xtick_bottom = True self.xtick_labeltop = False self.xtick_labelbottom = True self.xtick_major_size = self.linewidth*2 self.xtick_minor_size = self.xtick_major_size/2 self.xtick_major_width = self.linewidth/2 self.xtick_minor_width = self.xtick_major_width self.xtick_major_pad = self.pad self.xtick_minor_pad = self.pad self.xtick_color = self.colour_fg self.xtick_labelcolor = self.xtick_color self.xtick_labelsize = "medium" self.xtick_direction = "in" self.xtick_minor_visible = False self.xtick_major_top = True self.xtick_major_bottom = True self.xtick_minor_top = True self.xtick_minor_bottom = True self.xtick_minor_ndivs = "auto" self.xtick_alignment = "center" self.ytick_left = self.xtick_bottom self.ytick_right = self.xtick_top self.ytick_labelleft = self.xtick_labelbottom self.ytick_labelright = self.xtick_labeltop self.ytick_major_size = self.xtick_major_size self.ytick_minor_size = self.xtick_minor_size self.ytick_major_width = self.xtick_major_width self.ytick_minor_width = self.xtick_minor_width self.ytick_major_pad = self.xtick_major_pad self.ytick_minor_pad = self.xtick_minor_pad self.ytick_color = self.xtick_color self.ytick_labelcolor = self.xtick_labelcolor self.ytick_labelsize = self.xtick_labelsize self.ytick_direction = self.xtick_direction self.ytick_minor_visible = self.xtick_minor_visible self.ytick_major_left = self.xtick_major_bottom self.ytick_major_right = self.xtick_major_top self.ytick_minor_left = self.xtick_minor_bottom self.ytick_minor_right = self.xtick_minor_top self.ytick_minor_ndivs = self.xtick_minor_ndivs self.ytick_alignment = "center_baseline" # Grids self.grid_color = self.colour_mbg self.grid_linestyle = ":" self.grid_linewidth = self.linewidth/2 self.grid_alpha = 1 # Legend self.legend_loc = "best" self.legend_frameon = True self.legend_framealpha = 0.8 self.legend_facecolor = self.colour_bg self.legend_edgecolor = self.colour_mbg self.legend_fancybox = True self.legend_shadow = False self.legend_numpoints = 1 self.legend_scatterpoints = 1 self.legend_markerscale = 1.0 self.legend_fontsize = "medium" self.legend_labelcolor = self.colour_fg self.legend_title_fontsize = None self.legend_borderpad = 0.4 self.legend_labelspacing = 0.5 self.legend_handlelength = 2.0 self.legend_handleheight = 0.7 self.legend_handletextpad = 0.8 self.legend_borderaxespad = 0.5 self.legend_columnspacing = 2.0 # Figure self.figure_titlesize = "medium" self.figure_titleweight = "normal" self.figure_labelsize = "medium" self.figure_labelweight = "normal" self.figure_figsize = self.fig_x, self.fig_y self.figure_dpi = 150 self.figure_facecolor = self.colour_bg self.figure_edgecolor = self.colour_bg self.figure_frameon = True self.figure_subplot_left = 0.125 self.figure_subplot_right = 0.9 self.figure_subplot_bottom = 0.11 self.figure_subplot_top = 0.88 self.figure_subplot_wspace = 0.2 self.figure_subplot_hspace = 0.2 self.figure_autolayout = False self.figure_constrained_layout_use = True self.figure_constrained_layout_h_pad = 0.04 self.figure_constrained_layout_w_pad = 0.04 self.figure_constrained_layout_hspace = 0.02 self.figure_constrained_layout_wspace = 0.02 # Images self.image_aspect = "equal" self.image_interpolation = "auto" self.image_interpolation_stage = "auto" self.image_cmap = "viridis" self.image_lut = 256 self.image_origin = "upper" self.image_resample = True self.image_composite_image = True # Contour, error bar, histogram and scatter self.contour_negative_linestyle = "dashed" self.contour_corner_mask = True self.contour_linewidth = self.linewidth self.contour_algorithm = "mpl2014" self.errorbar_capsize = self.markersize self.hist_bins = 10 self.scatter_marker = "o" self.scatter_edgecolors = "face" # Savefig self.savefig_dpi = 300 self.savefig_facecolor = "auto" self.savefig_edgecolor = "auto" self.savefig_format = "pdf" self.savefig_bbox = "standard" self.savefig_pad_inches = 0 self.savefig_transparent = True # Compute self._compute() return None def _compute(self): self.context = {} # Paper margin = self.margin_left + self.margin_right \ + (self.n_cols - 1) * self.margin_cols figsize_x = self.paper[0]/self.n_cols - margin figsize_y = figsize_x / self.aspect # Lines self.context["lines.linewidth"] = self.lines_linewidth self.context["lines.linestyle"] = self.lines_linestyle self.context["lines.color"] = self.lines_color self.context["lines.marker"] = self.lines_marker self.context["lines.markerfacecolor"] = self.lines_markerfacecolor self.context["lines.markeredgecolor"] = self.lines_markeredgecolor self.context["lines.markeredgewidth"] = self.lines_markeredgewidth self.context["lines.markersize"] = self.lines_markersize self.context["lines.dash_joinstyle"] = self.lines_dash_joinstyle self.context["lines.dash_capstyle"] = self.lines_dash_capstyle self.context["lines.solid_joinstyle"] = self.lines_solid_joinstyle self.context["lines.solid_capstyle"] = self.lines_solid_capstyle # Patches self.context["patch.linewidth"] = self.patch_linewidth self.context["patch.facecolor"] = self.patch_facecolor self.context["patch.edgecolor"] = self.patch_edgecolor self.context["patch.force_edgecolor"] = self.patch_force_edgecolor # Boxplot self.context["boxplot.notch"] = self.boxplot_notch self.context["boxplot.vertical"] = self.boxplot_vertical self.context["boxplot.whiskers"] = self.boxplot_whiskers self.context["boxplot.bootstrap"] = self.boxplot_bootstrap self.context["boxplot.patchartist"] = self.boxplot_patchartist self.context["boxplot.showmeans"] = self.boxplot_showmeans self.context["boxplot.showcaps"] = self.boxplot_showcaps self.context["boxplot.showbox"] = self.boxplot_showbox self.context["boxplot.showfliers"] = self.boxplot_showfliers self.context["boxplot.meanline"] = self.boxplot_meanline self.context["boxplot.flierprops.color"] = self.boxplot_flierprops_color self.context["boxplot.flierprops.marker"] = self.boxplot_flierprops_marker self.context["boxplot.flierprops.markerfacecolor"] = self.boxplot_flierprops_markerfacecolor self.context["boxplot.flierprops.markeredgecolor"] = self.boxplot_flierprops_markeredgecolor self.context["boxplot.flierprops.markeredgewidth"] = self.boxplot_flierprops_markeredgewidth self.context["boxplot.flierprops.markersize"] = self.boxplot_flierprops_markersize self.context["boxplot.flierprops.linestyle"] = self.boxplot_flierprops_linestyle self.context["boxplot.flierprops.linewidth"] = self.boxplot_flierprops_linewidth self.context["boxplot.boxprops.color"] = self.boxplot_boxprops_color self.context["boxplot.boxprops.linewidth"] = self.boxplot_boxprops_linewidth self.context["boxplot.boxprops.linestyle"] = self.boxplot_boxprops_linestyle self.context["boxplot.whiskerprops.color"] = self.boxplot_whiskerprops_color self.context["boxplot.whiskerprops.linewidth"] = self.boxplot_whiskerprops_linewidth self.context["boxplot.whiskerprops.linestyle"] = self.boxplot_whiskerprops_linestyle self.context["boxplot.capprops.color"] = self.boxplot_capprops_color self.context["boxplot.capprops.linewidth"] = self.boxplot_capprops_linewidth self.context["boxplot.capprops.linestyle"] = self.boxplot_capprops_linestyle self.context["boxplot.medianprops.color"] = self.boxplot_medianprops_color self.context["boxplot.medianprops.linewidth"] = self.boxplot_medianprops_linewidth self.context["boxplot.medianprops.linestyle"] = self.boxplot_medianprops_linestyle self.context["boxplot.meanprops.color"] = self.boxplot_meanprops_color self.context["boxplot.meanprops.marker"] = self.boxplot_meanprops_marker self.context["boxplot.meanprops.markerfacecolor"] = self.boxplot_meanprops_markerfacecolor self.context["boxplot.meanprops.markeredgecolor"] = self.boxplot_meanprops_markeredgecolor self.context["boxplot.meanprops.linestyle"] = self.boxplot_meanprops_linestyle self.context["boxplot.meanprops.linewidth"] = self.boxplot_meanprops_linewidth # Font self.context["font.family"] = self.font_family self.context["font.style"] = self.font_style self.context["font.variant"] = self.font_variant self.context["font.weight"] = self.font_weight self.context["font.stretch"] = self.font_stretch self.context["font.size"] = self.font_size self.context["font.serif"] = self.font_serif self.context["font.sans-serif"] = self.font_sans_serif self.context["font.monospace"] = self.font_monospace # Text / LaTeX self.context["text.usetex"] = self.text_usetex self.context["text.latex.preamble"] = self.latex_preamble self.context["mathtext.fontset"] = self.mathtext_fontset # Axes self.context["axes.facecolor"] = self.axes_facecolor self.context["axes.edgecolor"] = self.axes_edgecolor self.context["axes.linewidth"] = self.axes_linewidth self.context["axes.grid"] = self.axes_grid self.context["axes.grid.axis"] = self.axes_grid_axis self.context["axes.grid.which"] = self.axes_grid_which self.context["axes.titlelocation"] = self.axes_titlelocation self.context["axes.titlesize"] = self.axes_titlesize self.context["axes.titleweight"] = self.axes_titleweight self.context["axes.titlecolor"] = self.axes_titlecolor self.context["axes.titley"] = self.axes_titley self.context["axes.titlepad"] = self.axes_titlepad self.context["axes.labelsize"] = self.axes_labelsize self.context["axes.labelpad"] = self.axes_labelpad self.context["axes.labelweight"] = self.axes_labelweight self.context["axes.labelcolor"] = self.axes_labelcolor self.context["axes.axisbelow"] = self.axes_axisbelow self.context["axes.prop_cycle"] = self.axes_prop_cycle # Axes self.context["axes.formatter.limits"] = self.axes_formatter_limits self.context["axes.formatter.use_locale"] = self.axes_formatter_use_locale self.context["axes.formatter.use_mathtext"] = self.axes_formatter_use_mathtext self.context["axes.formatter.min_exponent"] = self.axes_formatter_min_exponent self.context["axes.formatter.useoffset"] = self.axes_formatter_useoffset self.context["axes.formatter.offset_threshold"] = self.axes_formatter_offset_threshold self.context["axes.spines.left"] = self.axes_spines_left self.context["axes.spines.bottom"] = self.axes_spines_bottom self.context["axes.spines.top"] = self.axes_spines_top self.context["axes.spines.right"] = self.axes_spines_right self.context["axes.unicode_minus"] = self.axes_unicode_minus self.context["axes.xmargin"] = self.axes_xmargin self.context["axes.ymargin"] = self.axes_ymargin self.context["axes.zmargin"] = self.axes_zmargin self.context["axes.autolimit_mode"] = self.axes_autolimit_mode self.context["polaraxes.grid"] = self.polaraxes_grid self.context["axes3d.grid"] = self.axes3d_grid self.context["axes3d.automargin"] = self.axes3d_automargin self.context["axes3d.xaxis.panecolor"] = self.axes3d_xaxis_panecolor self.context["axes3d.yaxis.panecolor"] = self.axes3d_yaxis_panecolor self.context["axes3d.zaxis.panecolor"] = self.axes3d_zaxis_panecolor self.context["axes3d.mouserotationstyle"] = self.axes3d_mouserotationstyle self.context["axes3d.trackballsize"] = self.axes3d_trackballsize self.context["axes3d.trackballborder"] = self.axes3d_trackballborder # Axis self.context["xaxis.labellocation"] = self.xaxis_labellocation self.context["yaxis.labellocation"] = self.yaxis_labellocation # Dates self.context["date.autoformatter.year"] = self.date_autoformatter_year self.context["date.autoformatter.month"] = self.date_autoformatter_month self.context["date.autoformatter.day"] = self.date_autoformatter_day self.context["date.autoformatter.hour"] = self.date_autoformatter_hour self.context["date.autoformatter.minute"] = self.date_autoformatter_minute self.context["date.autoformatter.second"] = self.date_autoformatter_second self.context["date.autoformatter.microsecond"] = self.date_autoformatter_microsecond self.context["date.converter"] = self.date_converter self.context["date.interval_multiples"] = self.date_interval_multiples # Ticks self.context["xtick.top"] = self.xtick_top self.context["xtick.bottom"] = self.xtick_bottom self.context["xtick.labeltop"] = self.xtick_labeltop self.context["xtick.labelbottom"] = self.xtick_labelbottom self.context["xtick.major.size"] = self.xtick_major_size self.context["xtick.minor.size"] = self.xtick_minor_size self.context["xtick.major.width"] = self.xtick_major_width self.context["xtick.minor.width"] = self.xtick_minor_width self.context["xtick.major.pad"] = self.xtick_major_pad self.context["xtick.minor.pad"] = self.xtick_minor_pad self.context["xtick.color"] = self.xtick_color self.context["xtick.labelcolor"] = self.xtick_labelcolor self.context["xtick.labelsize"] = self.xtick_labelsize self.context["xtick.direction"] = self.xtick_direction self.context["xtick.minor.visible"] = self.xtick_minor_visible self.context["xtick.major.top"] = self.xtick_major_top self.context["xtick.major.bottom"] = self.xtick_major_bottom self.context["xtick.minor.top"] = self.xtick_minor_top self.context["xtick.minor.bottom"] = self.xtick_minor_bottom self.context["xtick.minor.ndivs"] = self.xtick_minor_ndivs self.context["xtick.alignment"] = self.xtick_alignment self.context["ytick.left"] = self.ytick_left self.context["ytick.right"] = self.ytick_right self.context["ytick.labelleft"] = self.ytick_labelleft self.context["ytick.labelright"] = self.ytick_labelright self.context["ytick.major.size"] = self.ytick_major_size self.context["ytick.minor.size"] = self.ytick_minor_size self.context["ytick.major.width"] = self.ytick_major_width self.context["ytick.minor.width"] = self.ytick_minor_width self.context["ytick.major.pad"] = self.ytick_major_pad self.context["ytick.minor.pad"] = self.ytick_minor_pad self.context["ytick.color"] = self.ytick_color self.context["ytick.labelcolor"] = self.ytick_labelcolor self.context["ytick.labelsize"] = self.ytick_labelsize self.context["ytick.direction"] = self.ytick_direction self.context["ytick.minor.visible"] = self.ytick_minor_visible self.context["ytick.major.left"] = self.ytick_major_left self.context["ytick.major.right"] = self.ytick_major_right self.context["ytick.minor.left"] = self.ytick_minor_left self.context["ytick.minor.right"] = self.ytick_minor_right self.context["ytick.minor.ndivs"] = self.ytick_minor_ndivs self.context["ytick.alignment"] = self.ytick_alignment # Grid self.context["grid.color"] = self.grid_color self.context["grid.linestyle"] = self.grid_linestyle self.context["grid.linewidth"] = self.grid_linewidth self.context["grid.alpha"] = self.grid_alpha # Legend self.context["legend.loc"] = self.legend_loc self.context["legend.frameon"] = self.legend_frameon self.context["legend.framealpha"] = self.legend_framealpha self.context["legend.facecolor"] = self.legend_facecolor self.context["legend.edgecolor"] = self.legend_edgecolor self.context["legend.fancybox"] = self.legend_fancybox self.context["legend.shadow"] = self.legend_shadow self.context["legend.numpoints"] = self.legend_numpoints self.context["legend.scatterpoints"] = self.legend_scatterpoints self.context["legend.markerscale"] = self.legend_markerscale self.context["legend.fontsize"] = self.legend_fontsize self.context["legend.labelcolor"] = self.legend_labelcolor self.context["legend.title_fontsize"] = self.legend_title_fontsize self.context["legend.borderpad"] = self.legend_borderpad self.context["legend.labelspacing"] = self.legend_labelspacing self.context["legend.handlelength"] = self.legend_handlelength self.context["legend.handleheight"] = self.legend_handleheight self.context["legend.handletextpad"] = self.legend_handletextpad self.context["legend.borderaxespad"] = self.legend_borderaxespad self.context["legend.columnspacing"] = self.legend_columnspacing # Figure self.context["figure.titlesize"] = self.figure_titlesize self.context["figure.titleweight"] = self.figure_titleweight self.context["figure.labelsize"] = self.figure_labelsize self.context["figure.labelweight"] = self.figure_labelweight self.context["figure.figsize"] = self.figure_figsize self.context["figure.dpi"] = self.figure_dpi self.context["figure.facecolor"] = self.figure_facecolor self.context["figure.edgecolor"] = self.figure_edgecolor self.context["figure.frameon"] = self.figure_frameon self.context["figure.subplot.left"] = self.figure_subplot_left self.context["figure.subplot.right"] = self.figure_subplot_right self.context["figure.subplot.bottom"] = self.figure_subplot_bottom self.context["figure.subplot.top"] = self.figure_subplot_top self.context["figure.subplot.wspace"] = self.figure_subplot_wspace self.context["figure.subplot.hspace"] = self.figure_subplot_hspace self.context["figure.autolayout"] = self.figure_autolayout self.context["figure.constrained_layout.use"] = self.figure_constrained_layout_use self.context["figure.constrained_layout.h_pad"] = self.figure_constrained_layout_h_pad self.context["figure.constrained_layout.w_pad"] = self.figure_constrained_layout_w_pad self.context["figure.constrained_layout.hspace"] = self.figure_constrained_layout_hspace self.context["figure.constrained_layout.wspace"] = self.figure_constrained_layout_wspace # Images self.context["image.aspect"] = self.image_aspect self.context["image.interpolation"] = self.image_interpolation self.context["image.interpolation_stage"] = self.image_interpolation_stage self.context["image.cmap"] = self.image_cmap self.context["image.lut"] = self.image_lut self.context["image.origin"] = self.image_origin self.context["image.resample"] = self.image_resample self.context["image.composite_image"] = self.image_composite_image # Contour, error bar, histogram and scatter self.context["contour.negative_linestyle"] = self.contour_negative_linestyle self.context["contour.corner_mask"] = self.contour_corner_mask self.context["contour.linewidth"] = self.contour_linewidth self.context["contour.algorithm"] = self.contour_algorithm self.context["errorbar.capsize"] = self.errorbar_capsize self.context["hist.bins"] = self.hist_bins self.context["scatter.marker"] = self.scatter_marker self.context["scatter.edgecolors"] = self.scatter_edgecolors # Savefig self.context["savefig.dpi"] = self.savefig_dpi self.context["savefig.facecolor"] = self.savefig_facecolor self.context["savefig.edgecolor"] = self.savefig_edgecolor self.context["savefig.format"] = self.savefig_format self.context["savefig.bbox"] = self.savefig_bbox self.context["savefig.pad_inches"] = self.savefig_pad_inches self.context["savefig.transparent"] = self.savefig_transparent return None from mpl_toolkits.mplot3d import axes3d if __name__ == "__main__": rc = ManchotRC() with plt.style.context(rc.context): fig, axs = plt.subplots(1, 3) fig.suptitle("Default plot") axs[0].plot([0,1,2,3,4], [2,1,4,3,6], label="curve 1") axs[0].plot([0,1,2,3,4], [4,3,1,2,4], "o--", label="curve 2") axs[0].set_title("Lorem") axs[0].set_xlabel("$x~\\mathrm{[cm]}$") axs[0].set_ylabel("$y~\\mathrm{[cm]}$") axs[0].legend() axs[1].scatter([0,1,2,3,4], [2,1,4,3,6]) axs[1].scatter([0,1,2,3,4], [4,3,1,2,4], s=[1,2,3,4,6]) axs[1].set_title("Ipsum") axs[1].set_xlabel("$x~\\mathrm{[cm]}$") axs[1].set_ylabel("$y~\\mathrm{[cm]}$") axs[1].text(2, 2, "sample text") axs[2].set_title("Dolor") axs[2].bar([1,2], [3,2]) axs[2].bar([3,4], [3,4], hatch="/") axs[2].boxplot([[2,4,6,4,6,4,6,5,6,6,7,7,8,7,5], [1,4,6,5,6,7,5,3,5,6,7], [2,6,5,6,6,4,5,6,7,5,4,5,2]]) axs[2].set_xlabel("Value") axs[2].set_ylabel("Number") fig = plt.figure() ax = fig.add_subplot(projection="3d") X, Y, Z = axes3d.get_test_data(0.05) # Plot the 3D surface ax.plot_surface(X, Y, Z, edgecolor='C0', lw=0.5, rstride=8, cstride=8, alpha=0.3) # Plot projections of the contours for each dimension. By choosing offsets # that match the appropriate axes limits, the projected contours will sit on # the 'walls' of the graph. ax.contour(X, Y, Z, zdir='z', offset=-100) ax.contour(X, Y, Z, zdir='x', offset=-40) ax.contour(X, Y, Z, zdir='y', offset=40) ax.set(xlim=(-40, 40), ylim=(-40, 40), zlim=(-100, 100), xlabel='X', ylabel='Y', zlabel='Z') plt.show()