2016-07-18 3 views
-1

私は、スタックされていないときにこのように見えるDataFrameを持っています。パンダ・シーボン・ヒート・マップ・エラー

Start Date 2016-07-11 2016-07-12 2016-07-13 
Period 
0    1.000000 1.000000   1.0 
1    0.684211 0.738095   NaN 
2    0.592105   NaN   NaN 

私はSeabornでヒートマップとしてプロットしようとしていますが、意図しない結果が出ています。

enter image description here

ここに私のコードです:

import pandas as pd 
import matplotlib.pyplot as plt 
import seaborn as sns 
df = pd.DataFrame(np.array(data), columns=['Start Date', 'Period', 'Users']) 
df = df.fillna(0) 
df = df.set_index(['Start Date', 'Period']) 
sizes = df['Users'].groupby(level=0).first() 
df = df['Users'].unstack(0).divide(sizes, axis=1) 
plt.title("Test") 
sns.heatmap(df.T, mask=df.T.isnull(), annot=True, fmt='.0%') 
plt.tight_layout() 
plt.savefig(table._v_name + "fig.png") 

テキストが重ならないと側の6つの熱伝説が存在しないように、私はそれをしたいです。可能であれば、%Y-%m-%dと表示されるように日付を修正するにはどうすればよいですか?

+0

意図しない結果がエラーではありません。 – Parfait

+0

この 'data'変数でこれを再現するのは難しいでしょう –

+0

*完全な例を表示してください。そうでないと助けません。あなたの例のプロットと字下げに基づいて、あなたはループしているように見えます(そして、それぞれのループ、つまりあなたの問題の新しい図形を作成しないように見えます)。しかし、あなたがしていることを推測するのは時間の無駄です。 。 – mwaskom

答えて

1

正確に再現可能なデータはありませんが、投稿されたスニペットデータを使用して以下を検討してください。この例では、pivot_table()を実行して、列間でStartDatesでポストされた構造を実現しています。全体的にヒートマップは、ユーザーによって分割されているように見えるunstack()処理のために、複数のカラーバーとオーバーラップする数字を出力する可能性があります(分割する場合はseaborn.FacetGridを見てください)。したがって、以下はヒートマップを使ってdfを実行します。また、apply()は、datetimeを指定された必要性に再フォーマットします。

from io import StringIO 
import matplotlib.pyplot as plt 
import numpy as np 
import pandas as pd 
import seaborn as sns 

data = '''Period,StartDate,Value 
     0,2016-07-11,1.000000 
     0,2016-07-12,1.000000 
     0,2016-07-13,1.0 
     1,2016-07-11,0.684211 
     1,2016-07-12,0.738095 
     1,2016-07-13 
     2,2016-07-11,0.592105 
     2,2016-07-12 
     2,2016-07-13''' 

df = pd.read_csv(StringIO(data)) 
df['StartDate'] = pd.to_datetime(df['StartDate']) 
df['StartDate'] = df['StartDate'].apply(lambda x: x.strftime('%Y-%m-%d')) 

pvtdf = df.pivot_table(values='Value', index=['Period'], 
         columns='StartDate', aggfunc=sum) 
print(pvtdf) 
# StartDate 2016-07-11 2016-07-12 2016-07-13 
# Period          
# 0   1.000000 1.000000   1.0 
# 1   0.684211 0.738095   NaN 
# 2   0.592105   NaN   NaN 

sns.set()  
plt.title("Test") 
ax = sns.heatmap(pvtdf.T, mask=pvtdf.T.isnull(), annot=True, fmt='.0%') 
plt.tight_layout() 
plt.show() 

Heat Map Output

関連する問題