Skip to content

Commit e164fbb

Browse files
authored
Merge pull request #19141 from harrymknight/bug-19118
FIX: suppress offset text in ConciseDateFormatter when largest scale is in years
2 parents 09ab2c2 + b1cd174 commit e164fbb

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed

lib/matplotlib/dates.py

+3
Original file line numberDiff line numberDiff line change
@@ -801,6 +801,9 @@ def format_ticks(self, values):
801801
# 3: hours, 4: minutes, 5: seconds, 6: microseconds
802802
for level in range(5, -1, -1):
803803
if len(np.unique(tickdate[:, level])) > 1:
804+
# level is less than 2 so a year is already present in the axis
805+
if (level < 2):
806+
self.show_offset = False
804807
break
805808
elif level == 0:
806809
# all tickdate are the same, so only micros might be different

lib/matplotlib/tests/test_dates.py

+24
Original file line numberDiff line numberDiff line change
@@ -523,6 +523,30 @@ def _create_auto_date_locator(date1, date2):
523523
assert strings == expected
524524

525525

526+
@pytest.mark.parametrize('t_delta, expected', [
527+
(datetime.timedelta(seconds=0.01), '1997-Jan-01 00:00'),
528+
(datetime.timedelta(minutes=1), '1997-Jan-01 00:01'),
529+
(datetime.timedelta(hours=1), '1997-Jan-01'),
530+
(datetime.timedelta(days=1), '1997-Jan-02'),
531+
(datetime.timedelta(weeks=1), '1997-Jan'),
532+
(datetime.timedelta(weeks=26), ''),
533+
(datetime.timedelta(weeks=520), '')
534+
])
535+
def test_concise_formatter_show_offset(t_delta, expected):
536+
d1 = datetime.datetime(1997, 1, 1)
537+
d2 = d1 + t_delta
538+
539+
fig, ax = plt.subplots()
540+
locator = mdates.AutoDateLocator()
541+
formatter = mdates.ConciseDateFormatter(locator)
542+
ax.xaxis.set_major_locator(locator)
543+
ax.xaxis.set_major_formatter(formatter)
544+
545+
ax.plot([d1, d2], [0, 0])
546+
fig.canvas.draw()
547+
assert formatter.get_offset() == expected
548+
549+
526550
@pytest.mark.parametrize('t_delta, expected', [
527551
(datetime.timedelta(weeks=52 * 200),
528552
['$\\mathdefault{%d}$' % (t, ) for t in range(1980, 2201, 20)]),

0 commit comments

Comments
 (0)