From ebf8853936092f3e4e030e83a788194bd52b6670 Mon Sep 17 00:00:00 2001 From: Nic Eggert Date: Wed, 14 Aug 2013 17:00:55 -0400 Subject: [PATCH] Fix bugs related to bottom kwarg in step histograms Conflicts: lib/matplotlib/axes.py lib/matplotlib/tests/baseline_images/test_axes/hist_step.png --- lib/matplotlib/axes.py | 23 ++++++++++++------ .../test_axes/hist_step_bottom.png | Bin 0 -> 9634 bytes lib/matplotlib/tests/test_axes.py | 9 +++++++ 3 files changed, 24 insertions(+), 8 deletions(-) create mode 100644 lib/matplotlib/tests/baseline_images/test_axes/hist_step_bottom.png diff --git a/lib/matplotlib/axes.py b/lib/matplotlib/axes.py index a3a92ee54d1f..ee0ffbfa2fbd 100644 --- a/lib/matplotlib/axes.py +++ b/lib/matplotlib/axes.py @@ -8319,18 +8319,18 @@ def hist(self, x, bins=10, range=None, normed=False, weights=None, hist_kwargs = dict(range=bin_range) n = [] - mlast = bottom + mlast = None for i in xrange(nx): # this will automatically overwrite bins, # so that each histogram uses the same bins m, bins = np.histogram(x[i], bins, weights=w[i], **hist_kwargs) m = m.astype(float) # causes problems later if it's an int - if mlast is None: - mlast = np.zeros(len(bins)-1, m.dtype) if normed and not stacked: db = np.diff(bins) m = (m.astype(float) / db) / m.sum() if stacked: + if mlast is None: + mlast = np.zeros(len(bins)-1, m.dtype) m += mlast mlast[:] = m n.append(m) @@ -8421,6 +8421,12 @@ def hist(self, x, bins=10, range=None, normed=False, weights=None, x[0:2*len(bins)-1:2], x[1:2*len(bins)-1:2] = bins, bins[:-1] x[2*len(bins)-1:] = x[1:2*len(bins)-1][::-1] + if bottom is None: + bottom = np.zeros(len(bins)-1, np.float) + + y[1:2*len(bins)-1:2], y[2:2*len(bins):2] = bottom, bottom + y[2*len(bins)-1:] = y[1:2*len(bins)-1][::-1] + if log: if orientation == 'horizontal': self.set_xscale('log', nonposx='clip') @@ -8456,12 +8462,13 @@ def hist(self, x, bins=10, range=None, normed=False, weights=None, xvals, yvals = [], [] for m in n: - # starting point for drawing polygon - y[0] = y[1] - # top of the previous polygon becomes the bottom - y[2*len(bins)-1:] = y[1:2*len(bins)-1][::-1] + if stacked: + # starting point for drawing polygon + y[0] = y[1] + # top of the previous polygon becomes the bottom + y[2*len(bins)-1:] = y[1:2*len(bins)-1][::-1] # set the top of this polygon - y[1:2*len(bins)-1:2], y[2:2*len(bins)-1:2] = m, m + y[1:2*len(bins)-1:2], y[2:2*len(bins):2] = m + bottom, m + bottom if log: y[y < minimum] = minimum if orientation == 'horizontal': diff --git a/lib/matplotlib/tests/baseline_images/test_axes/hist_step_bottom.png b/lib/matplotlib/tests/baseline_images/test_axes/hist_step_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..164ec8cb04dbd78623254c9236e8498950029778 GIT binary patch literal 9634 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