Отображение перевернутой вертикальной оси даты

1

Диаграмма, которую я пытаюсь сделать, представляет собой 2D-массив с датой в виде его вертикального размера. По соглашению, даты должны увеличиваться сверху вниз. Отображение даты в обратном порядке отлично работает с этим кодом:

import numpy as np
import matplotlib as mpl
import matplotlib.colorbar as cb
import matplotlib.pyplot as plt
from datetime import datetime

y = np.reshape(np.random.rand(100), (10, 10))
f1 = plt.figure()
ax1 = f1.add_axes([0.15, 0.15, 0.76, 0.80])
mindate = mpl.dates.date2num(datetime(2010, 1, 10))
maxdate = mpl.dates.date2num(datetime(2010, 1, 20))
im1 = ax1.imshow(y, cmap='binary', aspect='auto', origin='upper',
                 interpolation='nearest', extent=(0, 1, mindate, maxdate))
ax1.yaxis_date()
plt.show()

Реверсирование направления оси довольно просто с другими типами данных путем переключения интервальных границ, но с датой это приводит к пустой оси Y. Есть ли способ заставить это работать без написания пользовательского локатора галочки?

Теги:
matplotlib
axis

1 ответ

2
Лучший ответ

Слишком плохо, что инвертирование оси datetime уничтожает настройки ticklocator и форматирования. Самое простое, что я могу понять, - это вручную переустановить их. Здесь ссылка на таблицу формата . Здесь ссылка на DateFormatter. Возможно, вы также можете использовать AutoDateFormatter.

Здесь код:

import numpy as np
import matplotlib as mpl
import matplotlib.colorbar as cb
import matplotlib.pyplot as plt
from datetime import datetime
from matplotlib import dates

y = np.reshape(np.random.rand(100), (10, 10))
f1 = plt.figure()
ax1 = f1.add_axes([0.15, 0.15, 0.76, 0.80])
mindate = mpl.dates.date2num(datetime(2010, 1, 10))
maxdate = mpl.dates.date2num(datetime(2010, 1, 20))
im1 = ax1.imshow(
    y, cmap='binary', aspect='auto',
    origin='upper', interpolation='nearest',
    extent=(0, 1, mindate, maxdate))

ax1.yaxis_date()

ax1.invert_yaxis()
hfmt = dates.DateFormatter('%b %d %Y')
ax1.yaxis.set_major_locator(dates.DayLocator(interval=1))
ax1.yaxis.set_major_formatter(hfmt)

plt.show()

Он производит это: Изображение 174551

Ещё вопросы

Сообщество Overcoder
Наверх
Меню