2017-09-30 6 views
1

私はmatplotlibで視覚化しようとしている相関行列を持っています。ヒートマップスタイルの図を作成することはできますが、ラベルをどのようにしたいのかという問題にぶつかりつつあります。私はこれが可能かどうかも分かりませんが、これは私がやろうとしていることであり、それを働かせるようには見えません:matplotlib相関行列ヒートマップをラベルとしてグループ化した色

私の相関マトリックスは150 x 150です。xまたはyまたは両方...これは問題ではありません)軸を使用して、ラベルをグループ化し、単純にカラーまたはカラー背景に白いラベルでラベルを付けることができます。

明確にするために、1-15を「グループ1」とし、単に青いバーまたは青いバーの「グループ1」のテキストにしたいとします。次に、赤色のバー、または単に赤いバーの「グループ2」として16-20を選択します。 Etc、マトリックス内のすべての項目を介して。

私は、軸ラベルをグループ化したり、色を付けたりするのに失敗しています。どんな助けでも大歓迎です。私のコードは以下の通りですが、それは基本的なものですが、それが役立つかどうかはわかりません。

import matplotlib.pyplot as plt 
import matplotlib.cm as cm 
import numpy as np 

# COREELATION MATRIX TEST # 
corr = np.genfromtxt(csv_path,delimiter=',') 
fig = plt.figure() 
ax1 = fig.add_subplot(111) 
cmap = cm.get_cmap('jet', 30) 
cax = ax1.imshow(corr, cmap=cmap) 
ax1.grid(True) 
plt.title('THIS IS MY TITLE') 
fig.colorbar(cax, ticks=[-1,-0.8,-0.6,-0.4,-0.2,0.0,0.2,0.4,0.6,0.8,1.0]) 
plt.show() 
+0

どのように入力されたデータを検索し、グループ化パラメータが何であるのか? [mcve]にいくつかのサンプルデータを入力し、プロットの表示方法を説明するために使用してください。おそらく、あなたが望むものを簡単に描くことは、所望のプロットを理解するのに役立ちます。 – ImportanceOfBeingErnest

+0

私は類似のデータを表示し、何をしたいのかという写真をオンラインで見つけました:[リンク] https://www.researchgate.net/profile/Deanna_Greene/publication/292707637/figure/fig5/AS:[email protected]/この例では、赤い線とラベル(「デフォルトモード」や「ビジュアルモード」など)が表示されています。 )。変数を同じ方法でグループ化したいのですが、マトリックスの赤い線ではなく、むしろ色の見本にするだけです。 側面のカラーバーに似ていますが、手動で設定された色が使用されています。 – iamdamion

答えて

1

補助軸をプロットの隣に作成し、プロットのカラーバープロットをプロットすることができます。軸のスパインをオフにすると、それらのバーはラベルボックスのように見えます。

enter image description here

import numpy as np 
import matplotlib.pyplot as plt 
from mpl_toolkits.axes_grid1 import make_axes_locatable 

# COREELATION MATRIX TEST # 
corr = 2*np.random.rand(150,150)-1 
# labels [start,end] 
labels = np.array([[0,15],[16,36],[37,82],[83,111],[112,149]]) 
colors = ["crimson", "limegreen","gold","orchid","turquoise"] 

fig, ax = plt.subplots() 

im = ax.imshow(corr, cmap="Blues") 

ax.set_title('THIS IS MY TITLE') 
fig.colorbar(im, ticks=[-1,-0.8,-0.6,-0.4,-0.2,0.0,0.2,0.4,0.6,0.8,1.0]) 

# create axes next to plot 
divider = make_axes_locatable(ax) 
axb = divider.append_axes("bottom", "10%", pad=0.06, sharex=ax) 
axl = divider.append_axes("left", "10%", pad=0.06, sharey=ax) 
axb.invert_yaxis() 
axl.invert_xaxis() 
axb.axis("off") 
axl.axis("off") 


# plot colored bar plots to the axes 
barkw = dict(color=colors, linewidth=0.72, ec="k", clip_on=False, align='edge',) 
axb.bar(labels[:,0],np.ones(len(labels)), 
     width=np.diff(labels, axis=1).flatten(), **barkw) 
axl.barh(labels[:,0],np.ones(len(labels)), 
     height=np.diff(labels, axis=1).flatten(), **barkw) 

# set margins to zero again 
ax.margins(0) 
ax.tick_params(axis="both", bottom=0, left=0, labelbottom=0,labelleft=0) 
# Label the boxes 
textkw = dict(ha="center", va="center", fontsize="small") 
for k,l in labels: 
    axb.text((k+l)/2.,0.5, "{}-{}".format(k,l), **textkw) 
    axl.text(0.5,(k+l)/2., "{}-{}".format(k,l), rotation=-90,**textkw) 

plt.show() 
関連する問題