Тепловая карта Seaborn xticklabels плохо работает с датами - PullRequest
0 голосов
/ 21 марта 2019

Может быть, это постоянная проблема здесь. Хотя я задавал старые вопросы на сайте, я не смог полностью решить свою проблему. Некоторые старые темы форума мне очень помогли:

Показать даты на карте тепла морского ежа

Тепловая карта Сиборна с осями даты и времени

Ось даты в морской карте тепловых карт

Ось даты в морской карте тепловых карт

Но после долгих попыток я все никак не мог понять.

Моя проблема заключается в следующем:

У меня есть такой фрейм данных (но оригинал гораздо более обширный - индекс дат с 2004 по 2018 год с интервалом в один час).

        Estreito    Furnas  Manso   Itumbiara   Curuai
2004-01-19 15:00:00 NaN NaN 3.73    NaN NaN
2004-01-19 16:00:00 NaN NaN 5.10    NaN NaN
2004-01-19 17:00:00 NaN NaN 5.10    NaN NaN
2004-01-19 18:00:00 NaN NaN NaN     NaN NaN
2004-01-19 19:00:00 NaN NaN 4.31    NaN NaN
2004-01-19 20:00:00 NaN NaN 4.90    NaN NaN
2004-01-19 21:00:00 NaN NaN 5.88    NaN NaN
2004-01-19 22:00:00 NaN NaN 7.06    NaN NaN
2004-01-19 23:00:00 NaN NaN 4.71    NaN NaN
2004-01-20 00:00:00 NaN NaN NaN     NaN NaN
2004-01-20 01:00:00 NaN NaN 7.25    NaN NaN
2004-01-20 02:00:00 NaN NaN 5.10    NaN NaN
2004-01-20 03:00:00 NaN NaN 2.55    NaN NaN
2004-01-20 04:00:00 NaN NaN 0.39    NaN NaN
2004-01-20 05:00:00 NaN NaN 0.20    NaN NaN

Я хотел бы показать отсутствующие данные на графике, поэтому я использую тепловую карту модуля seaborn.

Следуя документации и старым темам форума, я получаю следующий скрипт.

import matplotlib.pyplot as plt
import seaborn as sns

df_transposed = df.transpose()

plt.subplots(1,1,figsize=(12,6))

ax = sns.heatmap(df_transposed.isnull(), cbar=False)

x_dates = df.index.strftime('%Y-%m').sort_values().unique()

ax.set_xticklabels(labels=x_dates, rotation=45)

Я получил следующую цифру:

enter image description here

Но, как видите, xticklabels не очень хороши. И, читая документацию Seaborn, я не смог найти никаких аргументов для установки количества xticks.

Я пытался назначить xticklabels только годами:

x_dates = df.index.strftime('%Y').sort_values().unique() 

Но это не так хорошо работает:

enter image description here

Я скромно прошу помощи в решении этой проблемы. Прошу прощения, если я не по теме.

Большое спасибо заранее.

...