Files
hyperfine/scripts/plot_whisker.py
T
muxator 5a80a23bdc scripts: modify shebang to use "/usr/bin/env python"
Before this patch, executing directly one of these scripts, for example
`./plot_hystogram.py` in a unix-like environment meant that the default
system-level python would be used, regardless of an eventual activated
virtualenv.

This was due to the "#!/usr/bin/python" shebang.
Changing it to "/usr/bin/env python" is a fairly standard practice, keeps intact
the compatiblity with the system level python, and allows a user to run in a
virtualenv if he wants.
2020-10-13 12:49:36 +02:00

44 lines
1.3 KiB
Python
Executable File

#!/usr/bin/env python
"""This program shows `hyperfine` benchmark results as a box and whisker plot.
Quoting from the matplotlib documentation:
The box extends from the lower to upper quartile values of the data, with
a line at the median. The whiskers extend from the box to show the range
of the data. Flier points are those past the end of the whiskers.
"""
import argparse
import json
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"
)
args = parser.parse_args()
with open(args.file) as f:
results = json.load(f)["results"]
if args.labels:
labels = args.labels.split(",")
else:
labels = [b["command"] for b in results]
times = [b["times"] for b in results]
boxplot = plt.boxplot(times, vert=True, patch_artist=True)
cmap = plt.cm.get_cmap("rainbow")
colors = [cmap(val / len(times)) for val in range(len(times))]
for patch, color in zip(boxplot["boxes"], colors):
patch.set_facecolor(color)
plt.title(args.title)
plt.legend(handles=boxplot["boxes"], labels=labels, loc="best", fontsize="medium")
plt.ylabel("Time [s]")
plt.ylim(0, None)
plt.show()