Closed
Description
The Axes.hist
method doesn't handle the bottom
kwarg properly when given log=True
and histtype='step'
or histtype='stepfilled'
. As the example below shows, the method sets a minimum
value to prevent issues with zeros on a log scale, but that supercedes a non-zero bottom
kwarg:
import numpy
from matplotlib import pyplot
fig = pyplot.figure()
ax = fig.gca()
ax.hist(numpy.random.random(1000), bins=100, log=True, bottom=1e-2, histtype='stepfilled')
ax.set_ylim(1e-2, 1e3)
ax.set_title('Bottom should be 1e-2, but instead is 1/base')
I can correct the issue with the following edit:
diff --git a/lib/matplotlib/axes/_axes.py b/lib/matplotlib/axes/_axes.py
index 4d10e86..2392a6d 100644
--- a/lib/matplotlib/axes/_axes.py
+++ b/lib/matplotlib/axes/_axes.py
@@ -5779,7 +5779,9 @@ class Axes(_AxesBase):
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)
which uses the bottom
value to set the minimum
if it's nonzero. If this is confirmed as a bug, I can open a PR.
Metadata
Metadata
Assignees
Labels
No labels