2017-07-27 18 views
0

シーボンのライブラリーを使用して、pandasデータフレームからヒートマップを作成しようとしています。ここでは、コードがされています。しかし、私は、x軸に印刷何も姿を取得していますシーボーンヒートマップの日付を表示

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

enter image description here

答えて

4

Seaborn heatmapは、カテゴリプロットです。これは0からnumber of columns - 1まで、この場合は0から366までになります。 datetimeロケータとフォーマッタは、値を日付(正確には日付に対応する数字)として期待します。問題の年は、730120(= 01-01-2000)と730486(= 01-01-2001)の間の数値になります。

したがって、matplotlib.datesフォーマッタとロケータを使用できるようにするには、まずデータフレームインデックスをdatetimeオブジェクトに変換する必要があります。ヒートマップを使用することはできませんが、数値軸を考慮したプロット(例: 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() 

enter image description here

+0

感謝。本当に助けになった。 –

関連する問題