Ns

Rのヒートマップを使用して混同行列をプロットする方法は?



How Plot Confusion Matrix Using Heatmaps R



解決:

あなたは使用して素晴らしい結果を達成することができますggplot2ですが、そのためには、x、y、およびプロットする値の3つの列を持つdata.frameが必要です。

使用するから収集tidyrツールデータの再フォーマットは非常に簡単です。



library( 'dplyr')library( 'tidyr')#サンプルを読み込んでいます。行名は独自の列(ここでは `y`)を取得する必要があります。うーん<- readr::read_delim('y a b c d e f g h i j a 5 4 0 0 0 0 0 0 0 0 b 0 0 0 0 0 0 0 0 0 0 c 0 0 4 0 0 0 0 0 0 0 d 0 0 0 0 0 0 0 0 0 0 e 2 0 0 0 2 0 0 0 0 0 f 1 0 0 0 0 2 0 0 0 0 g 0 0 0 0 0 0 0 0 0 0 h 0 0 0 0 0 0 0 0 0 0 i 0 0 0 0 0 0 0 0 0 0 j 0 0 0 0 0 0 0 0 0 0', delim=' ') # Gathering columns a to j hm % gather(x, value, a:j) # hm now looks like: # # A tibble: 100 x 3 # y x value # # 1 a a 5 # 2 b a 0 # 3 c a 0 # 4 d a 0 # 5 e a 2 # # ... with 95 more rows  

完全!プロットを始めましょう。 ggplot2を使用したヒートマップの基本的なジオメトリは次のとおりです。美学を提供するgeom_tileNS、yと塗りつぶし。

ライブラリ( 'ggplot2')ggplot(hm、aes(x = x、y = y、fill = value))+ geom_tile()

ヒートマップの最初の試み



悪くはありませんが、もっとうまくやることができます。まず、y軸を逆にします。秘訣は、xとyを、必要に応じて順序付けられたレベルの因子として提供することです。

hm%mutate(x = factor(x)、#デフォルトではアルファベット順y = factor(y、levels = rev(unique(y))))#アルファベットの逆順を強制

それから私は白黒のテーマが好きです灰色の背景を取り除くtheme_bw()。私もからのパレットを使用するのが好きですRColorBrewer(方向= 1で、値が大きいほど暗い色になります)。

あなたは同じことをプロットしているのでxとy軸、おそらく等しい軸スケールが必要です。coord_equal()は、正方形のプロットを提供します。



ggplot(hm、aes(x = x、y = y、fill = value))+ geom_tile()+ theme_bw()+ coord_equal()+ scale_fill_distiller(palette = 'Greens'、direction = 1)#その他の有効なパレット:赤、ブルース、スペクトル、RdYlBu(赤-黄-青)、..。

より良いヒートマップ

最後の仕上げ:タイルの上に値を印刷し、凡例は役に立たなくなったため削除します。明らかにこれはすべてオプションですが、それはあなたに構築するための材料を与えます。ノートgeom_textはを継承しますxと彼らがに渡されたのでy美学ggplot。

ggplot(hm、aes(x = x、y = y、fill = value))+ geom_tile()+ theme_bw()+ coord_equal()+ scale_fill_distiller(palette = 'Greens'、direction = 1)+ guides(fill = F )+# `fill`の凡例を削除labs(title = '値の分布')+#代わりにタイトルを使用geom_text(aes(label = value)、color = 'black')#値を出力

最終ヒートマップ

あなたも合格することができますcolor = '黒'からgeom_tileは、タイルの周りに(黒の)線を描画します。との最終プロットRdYlBuの配色(を参照)使用可能なパレットのリストについては、RColorBrewer :: display.brewer.all()を参照してください)。

より多くのオプションを紹介する


グレッグが言ったように、画像はおそらく行く方法です:

z = c(5,4,0,0,0,0,0,0,0,0、0,0,0,0,0,0,0,0,0,0、0,0,4、 0,0,0,0,0,0,0、0,0,0,0,0,0,0,0,0,0、2,0,0,0,2,0,0,0、 0,0、1,0,0,0,0,2,0,0,0,0、0,0,0,0,0,0,0,0,0,0、0,0,0、 0,0,0,0,0,0,0、0,0,0,0,0,0,0,0,0,0、0,0,0,0,0,0,0,0、 0,0)z = matrix(z、ncol = 10)colnames(z)= c( 'a'、 'b'、 'c'、 'd'、 'e'、 'f'、 'g'、 ' h '、' i '、' j ')rownames(z)= c(' a '、' b '、' c '、' d '、' e '、' f '、' g '、' h '、 'i'、 'j')##正しい画像プロット回転を取得するには##プロット画像を反転する必要があります(z [、ncol(z):1]、axes = FALSE)## y軸に追加しますラベル。 x軸についても同様の考えです。 axis(2、at = seq(0、1、length = length(colnames(z)))、labels = colnames(z))

あなたはまた見たいかもしれませんヒートマップ関数:

heatmap(t(z)[ncol(z):1、]、Rowv = NA、Colv = NA、col = heat.colors(256))