From 54ec5148714929fafad558417c581141e7d8cd53 Mon Sep 17 00:00:00 2001 From: Duncan Macleod Date: Wed, 8 Jul 2015 21:53:07 -0500 Subject: [PATCH 1/2] Axes.hist: use bottom for minimum if > 0 --- lib/matplotlib/axes/_axes.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/matplotlib/axes/_axes.py b/lib/matplotlib/axes/_axes.py index a41160789fbd..2cc1646fb285 100644 --- a/lib/matplotlib/axes/_axes.py +++ b/lib/matplotlib/axes/_axes.py @@ -5909,7 +5909,9 @@ def hist(self, x, bins=10, range=None, normed=False, weights=None, logbase = self.yaxis._scale.base # Setting a minimum of 0 results in problems for log plots - if normed or weights is not None: + if np.min(bottom) > 0: + minimum = np.min(bottom) + elif normed or weights is not None: # For normed data, set to log base * minimum data value # (gives 1 full tick-label unit for the lowest filled bin) ndata = np.array(n) From 72f72ebb5d931341193d6be4ccee1c93a4fef087 Mon Sep 17 00:00:00 2001 From: Duncan Macleod Date: Fri, 10 Jul 2015 14:47:07 -0500 Subject: [PATCH 2/2] test_hist_log_bottom: new test to check #4606 - this new test checks that the `bottom` kwarg to `Axes.hist` behaves as expected under a variety of circumstances when `log=True, histtype='step{filled}' given --- .../test_axes/hist_step_log_bottom.png | Bin 0 -> 7477 bytes lib/matplotlib/tests/test_axes.py | 24 ++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 lib/matplotlib/tests/baseline_images/test_axes/hist_step_log_bottom.png diff --git a/lib/matplotlib/tests/baseline_images/test_axes/hist_step_log_bottom.png b/lib/matplotlib/tests/baseline_images/test_axes/hist_step_log_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..48b4ced7f327245afe9b1f5ed4abc699b453506a GIT binary patch literal 7477 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 1/base + ax.hist(data, bins=10, log=True, histtype='stepfilled', + alpha=0.5, color='r', bottom=0.5) + # array bottom with some less than 1/base (should clip to 1/base) + ax.hist(data, bins=10, log=True, histtype='stepfilled', + alpha=0.5, color='y', bottom=np.arange(10)) + ax.set_ylim(9e-3, 1e3) + + def contour_dat(): x = np.linspace(-3, 5, 150) y = np.linspace(-3, 5, 120)