Skip to content

Commit e672bf8

Browse files
authored
Merge pull request #15347 from alexrudy/hist-datetime-bins
Fix axes.hist bins units
2 parents 56b98db + db32b26 commit e672bf8

File tree

2 files changed

+26
-0
lines changed

2 files changed

+26
-0
lines changed

lib/matplotlib/axes/_axes.py

+3
Original file line numberDiff line numberDiff line change
@@ -6573,6 +6573,9 @@ def hist(self, x, bins=None, range=None, density=False, weights=None,
65736573
if bin_range is not None:
65746574
bin_range = self.convert_xunits(bin_range)
65756575

6576+
if not cbook.is_scalar_or_string(bins):
6577+
bins = self.convert_xunits(bins)
6578+
65766579
# We need to do to 'weights' what was done to 'x'
65776580
if weights is not None:
65786581
w = cbook._reshape_2D(weights, 'weights')

lib/matplotlib/tests/test_axes.py

+23
Original file line numberDiff line numberDiff line change
@@ -1753,6 +1753,29 @@ def test_hist_datetime_datasets():
17531753
ax.hist(data, stacked=False)
17541754

17551755

1756+
@pytest.mark.parametrize("bins_preprocess",
1757+
[mpl.dates.date2num,
1758+
lambda bins: bins,
1759+
lambda bins: np.asarray(bins).astype('datetime64')],
1760+
ids=['date2num', 'datetime.datetime',
1761+
'np.datetime64'])
1762+
def test_hist_datetime_datasets_bins(bins_preprocess):
1763+
data = [[datetime.datetime(2019, 1, 5), datetime.datetime(2019, 1, 11),
1764+
datetime.datetime(2019, 2, 1), datetime.datetime(2019, 3, 1)],
1765+
[datetime.datetime(2019, 1, 11), datetime.datetime(2019, 2, 5),
1766+
datetime.datetime(2019, 2, 18), datetime.datetime(2019, 3, 1)]]
1767+
1768+
date_edges = [datetime.datetime(2019, 1, 1), datetime.datetime(2019, 2, 1),
1769+
datetime.datetime(2019, 3, 1)]
1770+
1771+
fig, ax = plt.subplots()
1772+
_, bins, _ = ax.hist(data, bins=bins_preprocess(date_edges), stacked=True)
1773+
np.testing.assert_allclose(bins, mpl.dates.date2num(date_edges))
1774+
1775+
_, bins, _ = ax.hist(data, bins=bins_preprocess(date_edges), stacked=False)
1776+
np.testing.assert_allclose(bins, mpl.dates.date2num(date_edges))
1777+
1778+
17561779
@pytest.mark.parametrize('data, expected_number_of_hists',
17571780
[([], 1),
17581781
([[]], 1),

0 commit comments

Comments
 (0)