Rで解析:インタラクティブなヒートマップ!D3.jsを利用した「d3heatmap」パッケージの紹介

Rの解析に役に立つ記事
スポンサーリンク

ヒートマップをインタラクティブに操作する「d3heatmap」パッケージがリリースされました。本パッケージのメインコマンド”d3heatmap”はgplotsの「heatmap.2」コマンドと多くが共通しているので、これらパッケージの使用経験があるとすぐに使いこなせると思います。

ためしに本パッケージより「400*50の20,000データ」を出力したところ、多少のモタつきはありますがぐりぐり動きました。サーバー経由でなければ一般的な使用方法には十分かと思います。なお、距離の計算は搭載メモリに依存しますのでデータ数は使用環境により異なります。

また、紹介する出力結果は利便性を考えて「50*10の500データ」としています。最下部に表示しています。ぐりぐり動かしてみてください。

Rを使用し始めたころから考えると、これほど多くのインタラクティブな結果を出力するパッケージがリリースされるとは思っていませんでした。

参考までにインタラクティブに結果を出力する「からだにいいもの」の記事を紹介します。また、RStudioを利用すると結果の出力が非常に楽です。出力方法は「dygraphs」パッケージの紹介記事から確認ください。

・「dygraphs」パッケージの紹介
https://www.karada-good.net/analyticsr/r-113/
・「qrage」パッケージの紹介
https://www.karada-good.net/analyticsr/r-119/
・「metricsgraphics」パッケージの紹介
https://www.karada-good.net/analyticsr/r-112/
・「DTパッケージ」の紹介
https://www.karada-good.net/analyticsr/r-107/
・「exCon」パッケージの紹介
https://www.karada-good.net/analyticsr/r-121/

これだけのパッケージがあれば、実用的な作業が十分にできるのではないでしょうか。

ぜひ、ウェブ関係者に利用いただければと思います。

紹介するパッケージバージョンは0.6.0、windows7 64bitとMac OS 10.10.3、RStudioはVersion 0.99.441、R version 3.2.0で確認しています。


スポンサーリンク

パッケージのインストール

下記コマンドを実行してください。

#パッケージのインストール
install.packages("d3heatmap")

実行コマンドの紹介

下記コマンドを実行してください。詳細はコメントまたはパッケージヘルプを確認してください。

#パッケージの読み込み
library("d3heatmap")

#データ例の作成
#50*10のデータ
TestData <- matrix(sample(1:1000, 500, replace = TRUE), 50, 10)
TestData <- data.frame(row.names = paste0("TEST", 1:50), TestData)
colnames(TestData) <- paste0("Data", 1:10)

#&#12503;&#12525;&#12483;&#12488;
#&#12458;&#12503;&#12471;&#12519;&#12531;&#28961;&#12375;&#12391;&#21336;&#32020;&#12395;&#12503;&#12525;&#12483;&#12488;
d3heatmap(TestData)

#&#12487;&#12531;&#12489;&#12525;&#12464;&#12521;&#12512;&#12398;&#34920;&#31034;&#35373;&#23450;:dendrogram&#12458;&#12503;&#12471;&#12519;&#12531;;&#21021;&#26399;&#20516;"both"
#"both", "row", "column", "none"&#12398;&#35373;&#23450;&#12364;&#21487;&#33021;
#&#12521;&#12505;&#12523;&#34920;&#31034;&#38918;&#12395;&#12418;&#24433;&#38911;&#12375;&#12414;&#12377;
d3heatmap(TestData, dendrogram = "none")

#&#34892;&#12392;&#21015;&#12398;&#36317;&#38626;&#35336;&#31639;&#12434;&#35373;&#23450;:Rowv;&#21021;&#26399;&#20516;TRUE, Colv;&#21021;&#26399;&#20516;"Rowv"&#12458;&#12503;&#12471;&#12519;&#12531;
#&#21021;&#26399;&#20516;&#12399;dist,hclust&#12467;&#12510;&#12531;&#12489;&#12398;&#21021;&#26399;&#35373;&#23450;&#12392;&#12394;&#12426;&#12414;&#12377;
#FALSE&#12434;&#25351;&#23450;&#12377;&#12427;&#12392;&#20006;&#12403;&#26367;&#12434;&#12375;&#12414;&#12379;&#12435;&#12364;Colv&#12399;&#21021;&#26399;&#20516;&#12364;&#20351;&#29992;&#12373;&#12428;&#12414;&#12377;
d3heatmap(TestData, Rowv = FALSE)

#&#12487;&#12531;&#12489;&#12525;&#12464;&#12521;&#12512;&#12434;&#25351;&#23450;&#12375;&#12383;&#12464;&#12523;&#12540;&#12503;&#12391;&#33394;&#20998;&#12369;:k_row, k_col&#12458;&#12503;&#12471;&#12519;&#12531;
#&#33394;&#12398;&#25351;&#23450;&#12399;color_branches&#12467;&#12510;&#12531;&#12489;&#12434;&#20351;&#29992;:&#26368;&#19979;&#37096;&#12391;&#32057;&#20171;
d3heatmap(TestData, k_row = 5, k_col = 3)

###Rowv, k_row, k_col&#12458;&#12503;&#12471;&#12519;&#12531;&#12434;&#36969;&#24540;&#12375;&#20986;&#21147;###
d3heatmap(TestData, Rowv = FALSE, k_row = 5, k_col = 3)
##############################################

#&#12475;&#12523;&#12398;&#33394;&#12434;&#25351;&#23450;:colors&#12458;&#12503;&#12471;&#12519;&#12531;;&#21021;&#26399;&#20516;"RdYlBu"
#colorRampPalette&#12467;&#12510;&#12531;&#12489;&#12434;&#21033;&#29992;&#12377;&#12427;&#12392;&#20415;&#21033;&#12391;&#12377;
d3heatmap(TestData, colors = colorRampPalette(c("#d9bb9c", "#4b61ba"))(10))

#&#12475;&#12523;&#12398;&#26528;&#32218;&#12434;&#28040;&#12377;:show_grid&#12458;&#12503;&#12471;&#12519;&#12531;;&#21021;&#26399;&#20516;TRUE
#FALSE&#12391;&#28040;&#12360;&#12414;&#12377;
d3heatmap(TestData, show_grid = FALSE,
          colors = colorRampPalette(c("#d9bb9c", "#4b61ba"))(10))

###colors, show_grid&#12458;&#12503;&#12471;&#12519;&#12531;&#12434;&#36969;&#24540;&#12375;&#20986;&#21147;###
d3heatmap(TestData, show_grid = FALSE,
          colors = colorRampPalette(c("#d9bb9c", "#4b61ba"))(10))
######################################################

##############################################
#&#21442;&#32771;:&#36317;&#38626;&#35336;&#31639;&#12398;&#26041;&#27861;&#20363;&#12392;color_branches&#12467;&#12510;&#12531;&#12489;&#12398;&#20351;&#29992;&#20363;
#as.dendrogram, hclust, Dist&#12467;&#12510;&#12531;&#12489;&#12434;&#21033;&#29992;
#&#36317;&#38626;&#35336;&#31639;&#25163;&#27861;&#12364;&#22810;&#12356;amap&#12497;&#12483;&#12465;&#12540;&#12472;&#12398;Dist&#12467;&#12510;&#12531;&#12489;&#12434;&#20351;&#29992;&#12375;&#12390;&#12356;&#12414;&#12377;
#&#35443;&#32048;&#12399;&#21508;&#12467;&#12510;&#12531;&#12489;&#12504;&#12523;&#12503;&#12434;&#12372;&#35239;&#12367;&#12384;&#12373;&#12356;

#amap&#12497;&#12483;&#12465;&#12540;&#12472;&#12398;&#12452;&#12531;&#12473;&#12488;&#12540;&#12523;
#install.packages("amap")
#amap&#12521;&#12452;&#12502;&#12521;&#12522;&#12398;&#35501;&#12415;&#36796;&#12415;
library(amap)

#&#36317;&#38626;&#35336;&#31639;
RowDist <- as.dendrogram(hclust(Dist(TestData, method = "pearson", nbproc=200),
                                method = "complete"))
ColDist <- as.dendrogram(hclust(Dist(t(TestData), method = "pearson", nbproc=200),
                                method = "complete"))

#&#12487;&#12531;&#12489;&#12525;&#12464;&#12521;&#12512;&#12398;&#33394;&#35373;&#23450;:dendextend&#12497;&#12483;&#12465;&#12540;&#12472;&#12398;color_branches&#12467;&#12510;&#12531;&#12489;&#12434;&#21033;&#29992;
library("dendextend")
RowDist <- color_branches(RowDist, k = NULL, h = NULL,
                          col = colorRampPalette(c("#4b61ba", "#ffdd99")))
ColDist <- color_branches(ColDist, k = NULL, h = NULL,
                          col = colorRampPalette(c("#deb7a0", "red")))

#k_row, k_col&#12458;&#12503;&#12471;&#12519;&#12531;&#12434;&#36969;&#29992;&#12377;&#12427;&#12392;&#12487;&#12531;&#12489;&#12525;&#12464;&#12521;&#12512;&#12398;&#33394;&#12399;&#21453;&#26144;&#12373;&#12428;&#12414;&#12379;&#12435;
d3heatmap(TestData, Rowv = RowDist, Colv = ColDist, show_grid = FALSE,
          colors = colorRampPalette(c("#d9bb9c", "#4b61ba"))(10))

出力例

ドラッグで拡大や行と列ラベルをクリックすることで一括選択ができます。拡大の解除はダブルクリックで可能です。

<オプション無しで単純にプロット>

<Rowv, k_row, k_colオプションを適応し出力>
列のデンドログラムがありません。列の並び順が元データのままです。

<colors, show_gridオプションを適応し出力>
セルの色、枠線なしです。

<参考:距離計算の方法例とcolor_branchesコマンドの使用例>
距離計算をDistコマンド、デンドログラムの色を変更しています。


少しでも、あなたのウェブや実験の解析が楽になりますように!!

タイトルとURLをコピーしました