2017-11-06 1 views
0

私はこのデータフレームdf持っている:Y軸に、私が欲しいながら、私はシステムを持ちたいX軸でDataFrameの個別の色の凡例を使用してヒートマップを作成するにはどうすればよいですか?

plt.figure(figsize=(12,6)) 
ax = sns.heatmap(df, annot=False, linewidths=.5, cmap="Set3") 
plt.ylabel('Features', fontsize=12) 
plt.xlabel('Systems', fontsize=12) 
plt.xticks(rotation='vertical') 
plt.yticks(rotation='horizontal') 
plt.show() 

:私はseabornの「ヒートマップ」を作成したい

df = pd.DataFrame(columns=["System","F1", "F2", "F3", "F4"], 
        data=[["System1",0,1,0,0], 
         ["System2",0,1,0,0]]) 

を特徴を持つこと。 System-Featureの値が0の場合、色は濃い青色、それ以外は薄い青色です。

どうすればいいですか?

答えて

1

編集:

反転したカラーマップは、より暗い色を小さな値に割り当てるという問題を解決します。 ypurの要件に従って凡例を追加することもやや複雑です。私は彼らが他の(元の)質問に言及しているとは思わない。


plt.imshow()

値がバイナリであれば、私は、ヒートマップのために行く必要が実際に存在しないと思います。 plt.imshow()を使用して、必要に応じてティック値を設定することができます。次に、ピクセル境界も描画する必要があります。これは、ホイールの再構築のようなものです。

df.set_index('System', inplace=True) 

plt.figure() 
im = plt.imshow(df.values.T, cmap='Blues_r') 

ax = plt.gca(); 

# Playing around with the ticks 
ax.set_xticks(np.arange(0, df.shape[0], 1)); 
ax.set_yticks(np.arange(0, df.shape[1], 1)); 


# dataframe columns and index values as tick labels 
ax.set_xticklabels(df.index.get_values()); 
ax.set_yticklabels(df.columns); 

# to draw the grid lines 
ax.set_xticks(np.arange(-.5, df.shape[0], 1), minor=True); 
ax.set_yticks(np.arange(-.5, df.shape[1], 1), minor=True); 

ax.grid(which='minor', color='b') 

plt.ylabel('Features', fontsize=12) 
plt.xlabel('Systems', fontsize=12) 

this answerを使用して、パッチを表示することができます。

import matplotlib.patches as mpatches 

values = np.unique(df.values.ravel()) 

colors = [ im.cmap(im.norm(value)) for value in values] 

patches = [ mpatches.Patch(color=colors[i], label="{l}".format(l=values[i]) , edgecolor='b') for i in range(len(values)) ] 

legend=plt.legend(handles=patches, bbox_to_anchor=(1.05, 1),loc=2, borderaxespad=0.5, frameon=True) 
frame = legend.get_frame() # to add a frame 
frame.set_facecolor('grey') 


plt.show() 

![enter image description here

sns.heatmap()

(不完全回答)

sns.heatmap(df.T, annot=False, linewidths=.5, cmap="Blues_r", linecolor='b')# Blues cmap has been inverted by appending '_r' 

enter image description here

+0

X軸のシステムとY軸の機能は私には分かりません。また、この場合の色の制御方法は? – Dinosaurius

+0

あなたは手動で目盛りラベルを設定することができ、cmapパラメータを使用する必要があります。私はこれを短時間で更新します。 – akilat90

+0

@Dinosauriusはこれがあなたが望むプロットですか? – akilat90

3

何か順序制御色

from matplotlib import colors 
cmap = colors.ListedColormap(['darkblue','blue']) 
sns.heatmap(df.set_index('System'),cmap=cmap) 

コントロールカラーで

sns.heatmap(df.set_index('System')) 

sns.heatmapよう

from matplotlib import colors 
cmap = colors.ListedColormap(['darkblue','blue']) 
bounds=[0, 1,99] 
norm = colors.BoundaryNorm(bounds, cmap.N) 
sns.heatmap(df.set_index('System'),cmap=cmap,norm =norm) 
+0

[OK]を、ありがとう。インデックスを設定すると助けになりました。しかし、どのように色を設定できますか?デフォルトでは、右側に色の凡例が表示され、グラデーションが含まれています。私は2つの色だけを持っています:1つは「0」、もう1つは「1」です。 – Dinosaurius

+0

@Dinosauriusを使用してcmapを制御してカラーを更新しました。 – Wen

+0

どのようにグラデーションカラーの凡例を変更しますか?それはちょうど "Darkblue:1"と "Blue:0"と言うべきです – Dinosaurius

関連する問題