2013-12-11 13 views
11

パンダのDataFrame TimeSeriesカラム(df_all.ts)をX軸としてMatplotLibヒートマップ(pcolormesh)を作成する必要があります。パンダを使用してヒートマップを作成する

Pandas TimeSeries列をヒートマップを作成するnp.meshgrid(x、y)関数でX軸として使用できるものに変換する方法は?回避策は、pandasカラムと同じパラメータを使用してMatplotlib drangeを作成することですが、簡単な方法はありますか?

x = pd.date_range(df_all.ts.min(),df_all.ts.max(),freq='H') 
xt = mdates.drange(df_all.ts.min(), df_all.ts.max(), dt.timedelta(hours=1)) 
y = arange(ylen) 
X,Y = np.meshgrid(xt, y) 
+0

を明確にせずにDEFIあなたのヒートマップは単純な2Dヒストグラムだと仮定します。だからあなたはDFをこれにリサンプリング/ピボットし、 'plt.imshow(df_all.values)'でそれをプロットしませんか? –

+0

imshow()がヒストグラムのすべてのポイントを指定する必要があることを理解しているので、軸Yには5〜20個のアイテムしか必要ありません – szu

+0

TimeSeriesの列にあるデータに従って、画像としてのプロットが動作し、軸ラベルを調整した場合、そのデータをx軸データとして正確に使用するようにmatplotlib関数を強制することに重点を置かないでください。 – ely

答えて

20

私はあなたが時系列のためのヒートマップで何を意味するのか分からないが、データフレームのために、あなたは以下のように行うことができます:

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

from itertools import product 
from string import ascii_uppercase 
from matplotlib import patheffects 

m, n = 4, 7 # 4 rows, 7 columns 
df = pd.DataFrame(np.random.randn(m, n), 
        columns=list(ascii_uppercase[:n]), 
        index=list(ascii_uppercase[-m:])) 


ax = plt.imshow(df, interpolation='nearest', cmap='Oranges').axes 

_ = ax.set_xticks(np.linspace(0, n-1, n)) 
_ = ax.set_xticklabels(df.columns) 
_ = ax.set_yticks(np.linspace(0, m-1, m)) 
_ = ax.set_yticklabels(df.index) 

ax.grid('off') 
ax.xaxis.tick_top() 

を、必要に応じて、それぞれの真ん中に実際の値を印刷します広場には、読みやすくするためにいくつかの影で、あなたが行うことがあります。

path_effects = [patheffects.withSimplePatchShadow(shadow_rgbFace=(1,1,1))] 

for i, j in product(range(m), range(n)): 
    _ = ax.text(j, i, '{0:.2f}'.format(df.iloc[i, j]), 
       size='medium', ha='center', va='center', 
       path_effects=path_effects) 

heat-map

+1

しかし、Xで分単位で数百ポイントを持っていれば、日付をフォーマットする方法はありますが、毎日の目盛だけを表示する必要がありますか? – szu

+0

@szuヒートマップを毎日の間隔に基づいていたい場合は、最初にpandas 'resample'メソッドを使用する必要があります。そうでない場合は、' set_xticks'と 'set_xticklabels'コールを変更してください。 –

+0

@ behzad.nouriValueError:ゼロの長さのフィールド名が "Do you(j、i、 '{:.2f}なぜでしょうか?Pandasバージョン0.14.1とPython 2.6.6 –

関連する問題