diff --git a/scripts/plotmpl.py b/scripts/plotmpl.py index faea5983..b26311f6 100755 --- a/scripts/plotmpl.py +++ b/scripts/plotmpl.py @@ -325,8 +325,11 @@ def main(csv_paths, output, *, dark=False, ggplot=False, xkcd=False, + github=False, font=None, font_size=FONT_SIZE, + font_color=None, + foreground=None, background=None): # guess the output format if not png and not svg: @@ -352,6 +355,25 @@ def main(csv_paths, output, *, if y is not None: y = [k for k, _ in y] + # some shortcuts for color schemes + if github: + ggplot = True + if font_color is None: + if dark: + font_color = '#c9d1d9' + else: + font_color = '#24292f' + if foreground is None: + if dark: + foreground = '#161b22' + else: + foreground = '#f6f8fa' + if background is None: + if dark: + background = '#0d1117' + else: + background = '#ffffff' + # what colors/alphas/formats to use? if colors is not None: colors_ = colors @@ -369,12 +391,26 @@ def main(csv_paths, output, *, else: formats_ = FORMATS + if font_color is not None: + font_color_ = font_color + elif dark: + font_color_ = '#ffffff' + else: + font_color_ = '#000000' + + if foreground is not None: + foreground_ = foreground + elif dark: + foreground_ = '#333333' + else: + foreground_ = '#e5e5e5' + if background is not None: background_ = background elif dark: - background_ = mpl.style.library['dark_background']['figure.facecolor'] + background_ = '#000000' else: - background_ = plt.rcParams['figure.facecolor'] + background_ = '#ffffff' # allow escape codes in labels/titles if title is not None: @@ -398,7 +434,7 @@ def main(csv_paths, output, *, if ggplot: plt.style.use('ggplot') plt.rc('patch', linewidth=0) - plt.rc('axes', edgecolor=background_) + plt.rc('axes', facecolor=foreground_, edgecolor=background_) plt.rc('grid', color=background_) # fix the the gridlines when ggplot+xkcd if xkcd: @@ -406,28 +442,32 @@ def main(csv_paths, output, *, plt.rc('axes.spines', bottom=False, left=False) if dark: plt.style.use('dark_background') - plt.rc('savefig', facecolor='auto') + plt.rc('savefig', facecolor='auto', edgecolor='auto') # fix ggplot when dark if ggplot: plt.rc('axes', - facecolor='#333333', - edgecolor=background_, - labelcolor='#aaaaaa') - plt.rc('xtick', color='#aaaaaa') - plt.rc('ytick', color='#aaaaaa') + facecolor=foreground_, + edgecolor=background_) plt.rc('grid', color=background_) if font is not None: plt.rc('font', family=font) plt.rc('font', size=font_size) + plt.rc('text', color=font_color_) plt.rc('figure', titlesize='medium') - plt.rc('axes', titlesize='medium', labelsize='small') - plt.rc('xtick', labelsize='small') - plt.rc('ytick', labelsize='small') + plt.rc('axes', + titlesize='medium', + labelsize='small', + labelcolor=font_color_) + if not ggplot: + plt.rc('axes', edgecolor=font_color_) + plt.rc('xtick', labelsize='small', color=font_color_) + plt.rc('ytick', labelsize='small', color=font_color_) plt.rc('legend', fontsize='small', fancybox=False, framealpha=None, + edgecolor=foreground_, borderaxespad=0) plt.rc('axes.spines', top=False, right=False) @@ -439,8 +479,8 @@ def main(csv_paths, output, *, fig = plt.figure(figsize=( width/plt.rcParams['figure.dpi'], height/plt.rcParams['figure.dpi']), - # note we need a linewidth to keep xkcd mode happy - linewidth=8) + # we need a linewidth to keep xkcd mode happy + linewidth=8 if xkcd else 0) ax = fig.subplots() for i, (name, dataset) in enumerate(datasets_.items()): @@ -844,6 +884,10 @@ def main(csv_paths, output, *, '--xkcd', action='store_true', help="Use the xkcd style.") + parser.add_argument( + '--github', + action='store_true', + help="Use the ggplot style with GitHub colors.") parser.add_argument( '--font', type=lambda x: [x.strip() for x in x.split(',')], @@ -851,6 +895,12 @@ def main(csv_paths, output, *, parser.add_argument( '--font-size', help="Font size for matplotlib. Defaults to %r." % FONT_SIZE) + parser.add_argument( + '--font-color', + help="Color for the font and other line elements.") + parser.add_argument( + '--foreground', + help="Foreground color to use.") parser.add_argument( '--background', help="Background color to use.")