From b04a9ec6c49121e98f8e0225bbe644689f43f7a5 Mon Sep 17 00:00:00 2001 From: Benjamin Rosemann Date: Tue, 17 Nov 2020 09:00:20 +0100 Subject: [PATCH] Add parameters to plotting scripts Add `imgname` parameter to be able to save a plot to a file instead of showing it. Use-case: platforms without GUI like docker containers. Add `labels` parameter to histogram plot. Use-case: replacing long commands with human friendly labels. --- scripts/plot_histogram.py | 16 +++++++++++++--- scripts/plot_parametrized.py | 6 +++++- scripts/plot_whisker.py | 6 +++++- 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/scripts/plot_histogram.py b/scripts/plot_histogram.py index 98afd36..62726f2 100755 --- a/scripts/plot_histogram.py +++ b/scripts/plot_histogram.py @@ -10,16 +10,23 @@ import matplotlib.pyplot as plt parser = argparse.ArgumentParser(description=__doc__) parser.add_argument("file", help="JSON file with benchmark results") parser.add_argument("--title", help="Plot title") +parser.add_argument( + "--labels", help="Comma-separated list of entries for the plot legend" +) parser.add_argument("--bins", help="Number of bins (default: auto)") parser.add_argument( "--type", help="Type of histogram (*bar*, barstacked, step, stepfilled)" ) +parser.add_argument("--imgname", help="Save image to the given filename.") args = parser.parse_args() with open(args.file) as f: results = json.load(f)["results"] -commands = [b["command"] for b in results] +if args.labels: + labels = args.labels.split(",") +else: + labels = [b["command"] for b in results] all_times = [b["times"] for b in results] t_min = np.min(list(map(np.min, all_times))) @@ -29,7 +36,7 @@ bins = int(args.bins) if args.bins else "auto" histtype = args.type if args.type else "bar" plt.hist( - all_times, label=commands, bins=bins, histtype=histtype, range=(t_min, t_max), + all_times, label=labels, bins=bins, histtype=histtype, range=(t_min, t_max), ) plt.legend(prop={"family": ["Source Code Pro", "Fira Mono", "Courier New"]}) @@ -37,4 +44,7 @@ plt.xlabel("Time [s]") if args.title: plt.title(args.title) -plt.show() +if args.imgname: + plt.savefig(args.imgname) +else: + plt.show() diff --git a/scripts/plot_parametrized.py b/scripts/plot_parametrized.py index d961773..d913c67 100755 --- a/scripts/plot_parametrized.py +++ b/scripts/plot_parametrized.py @@ -25,6 +25,7 @@ parser.add_argument( parser.add_argument( "--titles", help="Comma-separated list of titles for the plot legend" ) +parser.add_argument("--imgname", help="Save image to the given filename.") args = parser.parse_args() if args.parameter_name is not None: @@ -100,4 +101,7 @@ if args.log_x: if args.titles: plt.legend(args.titles.split(",")) -plt.show() +if args.imgname: + plt.savefig(args.imgname) +else: + plt.show() diff --git a/scripts/plot_whisker.py b/scripts/plot_whisker.py index 6085c8f..b320265 100755 --- a/scripts/plot_whisker.py +++ b/scripts/plot_whisker.py @@ -18,6 +18,7 @@ parser.add_argument("--title", help="Plot Title") parser.add_argument( "--labels", help="Comma-separated list of entries for the plot legend" ) +parser.add_argument("--imgname", help="Save image to the given filename.") args = parser.parse_args() with open(args.file) as f: @@ -41,4 +42,7 @@ if args.title: plt.legend(handles=boxplot["boxes"], labels=labels, loc="best", fontsize="medium") plt.ylabel("Time [s]") plt.ylim(0, None) -plt.show() +if args.imgname: + plt.savefig(args.imgname) +else: + plt.show()