diff --git a/lib/matplotlib/axes/_axes.py b/lib/matplotlib/axes/_axes.py index cca6f5d267a5..5cc8c4a88280 100644 --- a/lib/matplotlib/axes/_axes.py +++ b/lib/matplotlib/axes/_axes.py @@ -6712,13 +6712,19 @@ def hist(self, x, bins=None, range=None, density=False, weights=None, height = m - bottom else: height = m - patch = _barfunc(bins[:-1]+boffset, height, width, - align='center', log=log, - color=c, **{bottom_kwarg: bottom}) - patches.append(patch) + bars = _barfunc(bins[:-1]+boffset, height, width, + align='center', log=log, + color=c, **{bottom_kwarg: bottom}) + patches.append(bars) if stacked: bottom[:] = m boffset += dw + # Remove stickies from all bars but the lowest ones, as otherwise + # margin expansion would be unable to cross the stickies in the + # middle of the bars. + for bars in patches[1:]: + for patch in bars: + patch.sticky_edges.x[:] = patch.sticky_edges.y[:] = [] elif histtype.startswith('step'): # these define the perimeter of the polygon diff --git a/lib/matplotlib/tests/test_axes.py b/lib/matplotlib/tests/test_axes.py index e4eabe953e83..d9e4726ac041 100644 --- a/lib/matplotlib/tests/test_axes.py +++ b/lib/matplotlib/tests/test_axes.py @@ -1651,6 +1651,16 @@ def test_hist_log_2(fig_test, fig_ref): ax.hist(1, 1, log=True, histtype=histtype) +def test_hist_log_barstacked(): + fig, axs = plt.subplots(2) + axs[0].hist([[0], [0, 1]], 2, histtype="barstacked") + axs[0].set_yscale("log") + axs[1].hist([0, 0, 1], 2, histtype="barstacked") + axs[1].set_yscale("log") + fig.canvas.draw() + assert axs[0].get_ylim() == axs[1].get_ylim() + + @image_comparison(['hist_bar_empty.png'], remove_text=True) def test_hist_bar_empty(): # From #3886: creating hist from empty dataset raises ValueError