From cf92699e70d75c3b45f6742cf69d3782a9e2cd72 Mon Sep 17 00:00:00 2001 From: Xianxiang Li Date: Fri, 2 Apr 2021 14:29:28 +0800 Subject: [PATCH 1/2] FIX DateFormatter for month names when usetex=True --- lib/matplotlib/dates.py | 16 +++++++++++++++- lib/matplotlib/tests/test_dates.py | 17 ++++++++++------- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/lib/matplotlib/dates.py b/lib/matplotlib/dates.py index a2930a86fc80..dc348e1f21a8 100644 --- a/lib/matplotlib/dates.py +++ b/lib/matplotlib/dates.py @@ -592,7 +592,21 @@ def drange(dstart, dend, delta): def _wrap_in_tex(text): # Braces ensure dashes are not spaced like binary operators. - return '$\\mathdefault{' + text.replace('-', '{-}') + '}$' + p = re.compile("[a-zA-Z]+") + m = p.finditer(text) + cursor = 0 + ret_text = '' + + for i in m: + start = i.start() + end = i.end() + + ret_text += '$\\mathdefault{'+text[cursor:start].replace('-', '{-}') + ret_text += '}$'+text[start:end] + cursor = end + + ret_text += '$\\mathdefault{'+text[cursor:].replace('-', '{-}')+'}$' + return ret_text ## date tickers and formatters ### diff --git a/lib/matplotlib/tests/test_dates.py b/lib/matplotlib/tests/test_dates.py index 009cdfa6db97..03f51780239e 100644 --- a/lib/matplotlib/tests/test_dates.py +++ b/lib/matplotlib/tests/test_dates.py @@ -271,7 +271,8 @@ def callable_formatting_function(dates, _): (datetime.timedelta(weeks=52 * 200), [r'$\mathdefault{%d}$' % (year,) for year in range(1990, 2171, 20)]), (datetime.timedelta(days=30), - [r'$\mathdefault{Jan %02d 1990}$' % (day,) for day in range(1, 32, 3)]), + [r'$\mathdefault{}$Jan$\mathdefault{ %02d 1990}$' % (day,) + for day in range(1, 32, 3)]), (datetime.timedelta(hours=20), [r'$\mathdefault{%02d:00:00}$' % (hour,) for hour in range(0, 21, 2)]), ]) @@ -284,6 +285,7 @@ def test_date_formatter_usetex(delta, expected): locator.axis.set_view_interval(mdates.date2num(d1), mdates.date2num(d2)) formatter = mdates.AutoDateFormatter(locator, usetex=True) + print([formatter(loc) for loc in locator()]) assert [formatter(loc) for loc in locator()] == expected @@ -550,15 +552,16 @@ def test_concise_formatter_show_offset(t_delta, expected): (datetime.timedelta(weeks=52 * 200), ['$\\mathdefault{%d}$' % (t, ) for t in range(1980, 2201, 20)]), (datetime.timedelta(days=40), - ['$\\mathdefault{Jan}$', '$\\mathdefault{05}$', '$\\mathdefault{09}$', - '$\\mathdefault{13}$', '$\\mathdefault{17}$', '$\\mathdefault{21}$', - '$\\mathdefault{25}$', '$\\mathdefault{29}$', '$\\mathdefault{Feb}$', - '$\\mathdefault{05}$', '$\\mathdefault{09}$']), + ['$\\mathdefault{}$Jan$\\mathdefault{}$', '$\\mathdefault{05}$', + '$\\mathdefault{09}$', '$\\mathdefault{13}$', '$\\mathdefault{17}$', + '$\\mathdefault{21}$', '$\\mathdefault{25}$', '$\\mathdefault{29}$', + '$\\mathdefault{}$Feb$\\mathdefault{}$', '$\\mathdefault{05}$', + '$\\mathdefault{09}$']), (datetime.timedelta(hours=40), - ['$\\mathdefault{Jan{-}01}$', '$\\mathdefault{04:00}$', + ['$\\mathdefault{}$Jan$\\mathdefault{{-}01}$', '$\\mathdefault{04:00}$', '$\\mathdefault{08:00}$', '$\\mathdefault{12:00}$', '$\\mathdefault{16:00}$', '$\\mathdefault{20:00}$', - '$\\mathdefault{Jan{-}02}$', '$\\mathdefault{04:00}$', + '$\\mathdefault{}$Jan$\\mathdefault{{-}02}$', '$\\mathdefault{04:00}$', '$\\mathdefault{08:00}$', '$\\mathdefault{12:00}$', '$\\mathdefault{16:00}$']), (datetime.timedelta(seconds=2), From 5a8fc07d5d6076d332762d0b307e57b04fb53b97 Mon Sep 17 00:00:00 2001 From: Xianxiang Li Date: Fri, 2 Apr 2021 16:08:34 +0800 Subject: [PATCH 2/2] Change the implementation of _wrap_in_tex --- lib/matplotlib/dates.py | 20 ++++++-------------- lib/matplotlib/tests/test_dates.py | 17 +++++++---------- 2 files changed, 13 insertions(+), 24 deletions(-) diff --git a/lib/matplotlib/dates.py b/lib/matplotlib/dates.py index dc348e1f21a8..6e35658f9571 100644 --- a/lib/matplotlib/dates.py +++ b/lib/matplotlib/dates.py @@ -172,6 +172,7 @@ import functools import logging import math +import re from dateutil.rrule import (rrule, MO, TU, WE, TH, FR, SA, SU, YEARLY, MONTHLY, WEEKLY, DAILY, HOURLY, MINUTELY, @@ -591,21 +592,12 @@ def drange(dstart, dend, delta): def _wrap_in_tex(text): - # Braces ensure dashes are not spaced like binary operators. - p = re.compile("[a-zA-Z]+") - m = p.finditer(text) - cursor = 0 - ret_text = '' - - for i in m: - start = i.start() - end = i.end() + p = r'([a-zA-Z]+)' + ret_text = re.sub(p, r'}$\1$\\mathdefault{', text) - ret_text += '$\\mathdefault{'+text[cursor:start].replace('-', '{-}') - ret_text += '}$'+text[start:end] - cursor = end - - ret_text += '$\\mathdefault{'+text[cursor:].replace('-', '{-}')+'}$' + # Braces ensure dashes are not spaced like binary operators. + ret_text = '$\\mathdefault{'+ret_text.replace('-', '{-}')+'}$' + ret_text = ret_text.replace('$\\mathdefault{}$', '') return ret_text diff --git a/lib/matplotlib/tests/test_dates.py b/lib/matplotlib/tests/test_dates.py index 03f51780239e..f6a00405682a 100644 --- a/lib/matplotlib/tests/test_dates.py +++ b/lib/matplotlib/tests/test_dates.py @@ -271,8 +271,7 @@ def callable_formatting_function(dates, _): (datetime.timedelta(weeks=52 * 200), [r'$\mathdefault{%d}$' % (year,) for year in range(1990, 2171, 20)]), (datetime.timedelta(days=30), - [r'$\mathdefault{}$Jan$\mathdefault{ %02d 1990}$' % (day,) - for day in range(1, 32, 3)]), + [r'Jan$\mathdefault{ %02d 1990}$' % (day,) for day in range(1, 32, 3)]), (datetime.timedelta(hours=20), [r'$\mathdefault{%02d:00:00}$' % (hour,) for hour in range(0, 21, 2)]), ]) @@ -285,7 +284,6 @@ def test_date_formatter_usetex(delta, expected): locator.axis.set_view_interval(mdates.date2num(d1), mdates.date2num(d2)) formatter = mdates.AutoDateFormatter(locator, usetex=True) - print([formatter(loc) for loc in locator()]) assert [formatter(loc) for loc in locator()] == expected @@ -552,16 +550,15 @@ def test_concise_formatter_show_offset(t_delta, expected): (datetime.timedelta(weeks=52 * 200), ['$\\mathdefault{%d}$' % (t, ) for t in range(1980, 2201, 20)]), (datetime.timedelta(days=40), - ['$\\mathdefault{}$Jan$\\mathdefault{}$', '$\\mathdefault{05}$', - '$\\mathdefault{09}$', '$\\mathdefault{13}$', '$\\mathdefault{17}$', - '$\\mathdefault{21}$', '$\\mathdefault{25}$', '$\\mathdefault{29}$', - '$\\mathdefault{}$Feb$\\mathdefault{}$', '$\\mathdefault{05}$', - '$\\mathdefault{09}$']), + ['Jan', '$\\mathdefault{05}$', '$\\mathdefault{09}$', + '$\\mathdefault{13}$', '$\\mathdefault{17}$', '$\\mathdefault{21}$', + '$\\mathdefault{25}$', '$\\mathdefault{29}$', 'Feb', + '$\\mathdefault{05}$', '$\\mathdefault{09}$']), (datetime.timedelta(hours=40), - ['$\\mathdefault{}$Jan$\\mathdefault{{-}01}$', '$\\mathdefault{04:00}$', + ['Jan$\\mathdefault{{-}01}$', '$\\mathdefault{04:00}$', '$\\mathdefault{08:00}$', '$\\mathdefault{12:00}$', '$\\mathdefault{16:00}$', '$\\mathdefault{20:00}$', - '$\\mathdefault{}$Jan$\\mathdefault{{-}02}$', '$\\mathdefault{04:00}$', + 'Jan$\\mathdefault{{-}02}$', '$\\mathdefault{04:00}$', '$\\mathdefault{08:00}$', '$\\mathdefault{12:00}$', '$\\mathdefault{16:00}$']), (datetime.timedelta(seconds=2),