2013-04-09 10 views
39

ヒートマップのカラーバーの凡例を作成して、ラベルがそれぞれの色の中心になるようにしたいとします。理想的には私はラベルで、4色があり、各色の凡例バーを生成したい pmesh plotmatplotlib:colorbarsとそのテキストラベル

:怒鳴る(borrowed from here

次のプロットを生成
import matplotlib.pyplot as plt 
import numpy as np 
from matplotlib.colors import ListedColormap 

#discrete color scheme 
cMap = ListedColormap(['white', 'green', 'blue','red']) 

#data 
np.random.seed(42) 
data = np.random.rand(4, 4) 
fig, ax = plt.subplots() 
heatmap = ax.pcolor(data, cmap=cMap) 

#legend 
cbar = plt.colorbar(heatmap) 
cbar.ax.set_yticklabels(['0','1','2','>3']) 
cbar.set_label('# of contacts', rotation=270) 

# put the major ticks at the middle of each cell 
ax.set_xticks(np.arange(data.shape[1]) + 0.5, minor=False) 
ax.set_yticks(np.arange(data.shape[0]) + 0.5, minor=False) 
ax.invert_yaxis() 

#lebels 
column_labels = list('ABCD') 
row_labels = list('WXYZ') 
ax.set_xticklabels(column_labels, minor=False) 
ax.set_yticklabels(row_labels, minor=False) 

plt.show() 

を例を参照してくださいその中心:0,1,2,3、> 4

答えて

51
import matplotlib.pyplot as plt 
import numpy as np 
from matplotlib.colors import ListedColormap 

#discrete color scheme 
cMap = ListedColormap(['white', 'green', 'blue','red']) 

#data 
np.random.seed(42) 
data = np.random.rand(4, 4) 
fig, ax = plt.subplots() 
heatmap = ax.pcolor(data, cmap=cMap) 

#legend 
cbar = plt.colorbar(heatmap) 

cbar.ax.get_yaxis().set_ticks([]) 
for j, lab in enumerate(['$0$','$1$','$2$','$>3$']): 
    cbar.ax.text(.5, (2 * j + 1)/8.0, lab, ha='center', va='center') 
cbar.ax.get_yaxis().labelpad = 15 
cbar.ax.set_ylabel('# of contacts', rotation=270) 


# put the major ticks at the middle of each cell 
ax.set_xticks(np.arange(data.shape[1]) + 0.5, minor=False) 
ax.set_yticks(np.arange(data.shape[0]) + 0.5, minor=False) 
ax.invert_yaxis() 

#lebels 
column_labels = list('ABCD') 
row_labels = list('WXYZ') 
ax.set_xticklabels(column_labels, minor=False) 
ax.set_yticklabels(row_labels, minor=False) 

plt.show() 

あなたは非常に近くでした。カラーバーの軸への参照ができたら、テキストラベルを中央に置くなど、これまでに何をしたいことができます。より見やすくするために、書式設定を使用して演奏したい場合があります。

demo

+0

ありがとう!非常に高く評価。 – dimka

+0

私はこれを試して、ほとんど動作します。なんらかの理由で、 "cbar.ax.axis( 'off')"行のために軸ラベル名 "#of contacts"が消えました。ラベルを貼る方法は? – dimka

+0

@dimka編集を参照してください。ちょっと違うようにティックをオフにするだけです。あなたはまだよく見えるようにフォントを調整する必要がありますが、私はそれを読者のための練習として残しています;) – tacaswell

関連する問題