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

Skip to content

Commit 8996e1d

Browse files
committed
Suppress offset text in ConciseDateFormatter when largest scale is in years
Add tests for offset text in ConciseDateFormatter
1 parent 27aaf0c commit 8996e1d

2 files changed

Lines changed: 27 additions & 0 deletions

File tree

lib/matplotlib/dates.py

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

lib/matplotlib/tests/test_dates.py

Lines changed: 24 additions & 0 deletions
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)