Seaborn heatmap
ist ein kategorisches Grundstück. Es skaliert von 0
bis number of columns - 1
, in diesem Fall von 0
bis 366
. Die Datetime-Locators und Formatierer erwarten Werte als Datumsangaben (genauer gesagt Zahlen, die Datumsangaben entsprechen). Für das betreffende Jahr wären dies Zahlen zwischen 730120
(= 01-01-2000) und 730486
(= 01-01-2001).
Um also die Formatierer und Locators von matplotlib.dates verwenden zu können, müssten Sie zuerst Ihren Dataframe-Index in datetime-Objekte konvertieren. Sie können dann keine Heatmap verwenden, sondern eine grafische Darstellung, die numerische Achsen ermöglicht, z. ein imshow
Grundstück. Sie können dann das Ausmaß dieses Imshow-Diagramms so einstellen, dass es dem Datumsbereich entspricht, den Sie anzeigen möchten.
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()
Danke für so eine detaillierte Erklärung. Es war in der Tat hilfreich. –