Skip to content

Axes.hist with log=True, histtype='step...' ignores bottom kwarg #4606

@duncanmmacleod

Description

@duncanmmacleod

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')

mpl-hist-bottom

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

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions