2017-07-27 8 views
0

Ich versuche, eine Heatmap aus Pandas Datenrahmen mit Seaborn-Bibliothek erstellen. Hier ist der Code:Daten auf seaborn Heatmap anzeigen

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')) 

Allerdings bekomme ich eine Figur mit nichts auf der X-Achse gedruckt.

enter image description here

Antwort

4

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() 

enter image description here

+0

Danke für so eine detaillierte Erklärung. Es war in der Tat hilfreich. –

Verwandte Themen