Хобрук: Ваш путь к мастерству в программировании

Показать даты на тепловой карте Seaborn

Я пытаюсь создать тепловую карту из фрейма данных pandas, используя библиотеку seaborn. Вот код:

test_df = pd.DataFrame(np.random.randn(367, 5), 
                 index = pd.DatetimeIndex(start='01-01-2000', end='01-01-2001', freq='1D'))

ax = sns.heatmap(test_df.T)
ax.xaxis.set_major_locator(mdates.MonthLocator())
ax.xaxis.set_minor_locator(mdates.DayLocator())
ax.xaxis.set_major_formatter(mdates.DateFormatter('%b'))
ax.xaxis.set_minor_formatter(mdates.DateFormatter('%d'))

Однако я получаю фигуру, на которой ничего не напечатано по оси X.

введите здесь описание изображения


Ответы:


1

Seaborn heatmap — это категоричный сюжет. Масштабируется от 0 до number of columns - 1, в данном случае от 0 до 366. Локаторы даты и времени и средства форматирования ожидают значений в виде дат (или, точнее, чисел, соответствующих датам). Для рассматриваемого года это будут числа от 730120 (= 01-01-2000) до 730486 (= 01-01-2001).

Таким образом, чтобы иметь возможность использовать средства форматирования и локаторы matplotlib.dates, вам необходимо сначала преобразовать индекс вашего фрейма данных в объекты даты и времени. Затем вы можете использовать не тепловую карту, а график, который позволяет использовать числовые оси, например. сюжет imshow. Затем вы можете установить размер этого графика imshow в соответствии с диапазоном дат, который вы хотите показать.

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

df = pd.DataFrame(np.random.randn(367, 5), 
                 index = pd.DatetimeIndex(start='01-01-2000', end='01-01-2001', freq='1D'))

dates = df.index.to_pydatetime()
dnum = mdates.date2num(dates)
start = dnum[0] - (dnum[1]-dnum[0])/2.
stop = dnum[-1] + (dnum[1]-dnum[0])/2.
extent = [start, stop, -0.5, len(df.columns)-0.5]

fig, ax = plt.subplots()
im = ax.imshow(df.T.values, extent=extent, aspect="auto")

ax.xaxis.set_major_locator(mdates.MonthLocator())
ax.xaxis.set_minor_locator(mdates.DayLocator())
ax.xaxis.set_major_formatter(mdates.DateFormatter('%b'))

fig.colorbar(im)
plt.show()

введите описание изображения здесь

27.07.2017
  • Спасибо за такое подробное объяснение. Это было действительно полезно. 27.07.2017

  • 2

    Я нашел этот вопрос, когда пытался сделать нечто подобное, и вы можете найти решение, но оно не очень красивое.

    Например, я получаю текущие метки, перебираю их, чтобы найти те, которые относятся к январю, и устанавливаю для них только год, а остальные устанавливаю пустыми.

    Это дает мне метки года в правильном положении.

    xticklabels = ax.get_xticklabels()
    
    for label in xticklabels:
        text = label.get_text()
        if text[5:7] == '01':
            label.set_text(text[0:4])
        else:
            label.set_text('')
    
    ax.set_xticklabels(xticklabels)
    

    Надеюсь, из этого вы сможете понять, что вы хотите сделать.

    12.03.2019
    Новые материалы

    Управление DOM для чайников вроде меня
    Одной из первых вещей, которую мы рассмотрели, когда начали изучать Javascript во Flatiron, была модель DOM. Кто он? Чем он занимается? Он больше машина, чем человек? Ну да довольно много. ДОМ..

    Что такое структура данных?
    Структура данных хранит и извлекает данные. Все, что обеспечивает эти две функции, является структурой данных . Период. Вы можете пропустить оставшуюся часть статьи, если ответ..

    мои январские чтения по программированию
    Эрик Эллиот Программирование приложения JavaScript Эл Свейгарт «Автоматизируйте скучные вещи с помощью Python» Прогрессивное веб-приложение Google..

    Создание ассоциаций секвелизации с помощью инструмента командной строки Sequelize
    Sequelize - популярный, простой в использовании инструмент объектно-реляционного сопоставления (ORM) JavaScript, который работает с базами данных SQL. Довольно просто начать новый проект с..

    Искусственный интеллект в юридической отрасли - пример прогнозирования судебных решений с помощью глубокого обучения
    На протяжении всей истории люди полагались на суды, присяжных, королей и королев в отправлении правосудия. Сегодня способность судов обеспечивать справедливое и быстрое правосудие для своих..

    Введение в машинное обучение для обнаружения аномалий (часть 1)
    Тщательно созданный, тщательно спроектированный ресурс для специалистов по данным. Часть 1 Главы 03 из Руководства по машинному обучению для обнаружения аномалий Внимание! Прежде чем вы..

    Начало работы с Pulumi в Digital Ocean
    Цифровой океан (ДО) — отличная альтернатива многим другим поставщикам облачных услуг. DO предоставляет простой и понятный пользовательский интерфейс, упрощающий управление инфраструктурой и..