Thanks to visit codestin.com
Credit goes to github.com

Skip to content

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

Closed
@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

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions