Как показать месяц на оси x и день на ярлыке нижнего колонтитула для Matplotlib с бэкэндом ipympl - PullRequest
1 голос
/ 06 мая 2020

Я использую JupiterLab с ipymlp, и в основном я хочу напечатать месяц по оси x, а месяц и день - в нижнем колонтитуле (пока мышь находится над графиком). Так есть ли способ изменить один из них и не повлиять на другой?

Вот пример с выделенной проблемой. Current behavior Желаемое поведение будет примерно таким Desired behavior

Мой текущий код

%matplotlib widget

fig = plt.figure(figsize=(9,6))

# Drawing max and min lines with custom tuned palette
date_index = np.arange('2015-01-01','2016-01-01', dtype='datetime64[D]')

plt.plot(date_index, stats['max_temp'], '-', linewidth=1, color='#ffbcaf')
plt.plot(date_index, stats['min_temp'], '-', linewidth=1, color='#a5d5d8')

plt.gca().xaxis.set_major_locator(dates.MonthLocator(bymonthday=15))
plt.gca().xaxis.set_major_formatter(dates.DateFormatter('%d %b'))

Очевидно, если я меняю последний Строка к этой

plt.gca().xaxis.set_major_formatter(dates.DateFormatter('%b'))

Ярлыки осей в порядке, но нижний колонтитул показывает месяц и не показывает день месяца.

1 Ответ

0 голосов
/ 08 мая 2020

Это своего рода взлом, но идея заключается в том, что виджет считывает основные отметки, поэтому нам нужно показать второстепенные отметки на графике и скрыть основные.

Вместо

plt.gca().xaxis.set_major_locator(dates.MonthLocator(bymonthday=15))
plt.gca().xaxis.set_major_formatter(dates.DateFormatter('%d %b'))

Мы показываем второстепенное и скрываем большое с помощью

plt.gca().xaxis.set_minor_locator(dates.MonthLocator(bymonthday=15))
plt.gca().xaxis.set_minor_formatter(dates.DateFormatter('%b'))

plt.gca().xaxis.set_major_locator(plt.NullLocator())
plt.gca().xaxis.set_major_formatter(dates.DateFormatter('%d %b'))

И скрываем второстепенные отметки (при необходимости)

plt.tick_params(top=False, bottom=False, left=False, right=False, labelleft=True, labelbottom=True, which='minor')
...