plot_utils: create plot_freq_hists() and plot_temperature_hist() to plot histograms of multiple runs

Revamp the histogram plotting infrastructure in the process to deal
with multiple runs effectively.
diff --git a/tests/test_plot_utils.py b/tests/test_plot_utils.py
index 4b8007a..21f289a 100644
--- a/tests/test_plot_utils.py
+++ b/tests/test_plot_utils.py
@@ -91,7 +91,8 @@
         """Test that plost_hist doesn't bomb"""
         data = pd.Series([1, 1, 2, 4])
 
-        plot_utils.plot_hist(data, "Foo", 20, "numbers", (0, 4), "default")
+        _, ax = matplotlib.pyplot.subplots()
+        plot_utils.plot_hist(data, ax, "Foo", 20, "numbers", (0, 4), "default")
 
 class TestPlotUtilsNeedTrace(BaseTestThermal):
     def __init__(self, *args, **kwargs):
@@ -172,3 +173,31 @@
 
         plot_utils.plot_output_power(runs, self.actor_order, width=20)
         matplotlib.pyplot.close('all')
+
+    def test_plot_freq_hists(self):
+        """plot_utils.plot_freq_hists() doesn't bomb"""
+
+        run1 = cr2.Run(name="first")
+        run2 = cr2.Run(name="second")
+        runs = [run1, run2]
+
+        plot_utils.plot_freq_hists(runs, self.map_label)
+        matplotlib.pyplot.close('all')
+
+    def test_plot_freq_hists_single_run(self):
+        """plot_utils.plot_freq_hists() works with a single run"""
+
+        run = cr2.Run()
+
+        plot_utils.plot_freq_hists([run], self.map_label)
+        matplotlib.pyplot.close('all')
+
+    def test_plot_temperature_hist(self):
+        """plot_utils.plot_temperature_hist() doesn't bomb"""
+
+        run1 = cr2.Run(name="first")
+        run2 = cr2.Run(name="second")
+        runs = [run1, run2]
+
+        plot_utils.plot_temperature_hist(runs)
+        matplotlib.pyplot.close('all')