web-dev-qa-db-ja.com

R pheatmap:アノテーションの色を変更し、グラフィックウィンドウがポップアップするのを防ぎます

この質問 のフォローアップで、pheatmap関数を見つけました(これにより、heatmap.2よりも、やりたいことをより詳細に制御できます)。

私は2つの問題を抱えています:

1-注釈(カテゴリ)の色を変更できない

2- PNGファイルに出力を保存しているときでも、グラフィックスウィンドウがポップアップし続けます

これは私のMWEです。

library(pheatmap)
library(RColorBrewer)
cols <- colorRampPalette(brewer.pal(9, "Set1"))

mymat <- matrix(rexp(600, rate=.1), ncol=12)
colnames(mymat) <- c(rep("treatment_1", 3), rep("treatment_2", 3), rep("treatment_3", 3), rep("treatment_4", 3))
rownames(mymat) <- paste("gene", 1:dim(mymat)[1], sep="_")

annotdf <- data.frame(row.names = paste("gene", 1:dim(mymat)[1], sep="_"), category = c(rep("CATEGORY_1", 10), rep("CATEGORY_2", 10), rep("CATEGORY_3", 10), rep("CATEGORY_4", 10), rep("CATEGORY_5", 10)))

mycolors <- cols(length(unique(annotdf$category)))
names(mycolors) <- unique(annotdf$category)
mycolors <- list(mycolors = mycolors)

pheatmap(mymat,
     color=greenred(75),
     scale="row",
     cluster_rows = FALSE,
     cluster_cols = FALSE,
     gaps_row=c(10,20,30,40),
     gaps_col=c(3,6,9),
     cellheight = 6,
     cellwidth = 20,
     border_color=NA,
     fontsize_row = 6,
     main="Genes grouped by categories",
     filename = "TEST.png",
     annotation_row = annotdf,
     annotation_colors = mycolors
)

生成されるもの:

TEST

ご覧のとおり、色は明らかに私が指定するSet1パレットではありませんが、デフォルトのヒートマップの色です(annotation_colors行を削除しても同じ結果が得られます)。

colors

だから私の質問は:pheatmapでannotation_colorsを指定するにはどうすればよいですか?

一方、Pheatmapの出力をpngファイルに保存している場合でも、グラフィックスウィンドウがポップアップし続けますが、これを防ぐにはどうすればよいですか?

ありがとう!

> sessionInfo()
R version 3.3.1 (2016-06-21)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 16.04.1 LTS

locale:
 [1] LC_CTYPE=en_SG.UTF-8       LC_NUMERIC=C              
 [3] LC_TIME=en_SG.UTF-8        LC_COLLATE=en_SG.UTF-8    
 [5] LC_MONETARY=en_SG.UTF-8    LC_MESSAGES=en_SG.UTF-8   
 [7] LC_PAPER=en_SG.UTF-8       LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=en_SG.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] gplots_3.0.1       RColorBrewer_1.1-2 pheatmap_1.0.8    

loaded via a namespace (and not attached):
 [1] compiler_3.3.1     colorspace_1.2-6   scales_0.4.0       plyr_1.8.3        
 [5] tools_3.3.1        gtable_0.2.0       Rcpp_0.12.7        KernSmooth_2.23-15
 [9] gdata_2.17.0       grid_3.3.1         caTools_1.17.1     bitops_1.0-6      
[13] munsell_0.4.3      gtools_3.5.0
7
DaniCee
  1. より多くのカテゴリでより多くの色を取得するには、別のカラーパレットを使用する必要があります。 (RColorBrewerのように)12をはるかに超えることができる多くの連続したパレットがあります。

  2. MWEでコードをそのまま実行している場合、Rグラフィックスウィンドウはポップアップ表示されません。私はあなたの例を実行しました、そしてそれはコンソールにグラフィックデバイスを開かずに望ましいファイルを作りました。以下は、比較したい場合のsessioInfo()です。私はすべてのデバイスを閉じて(nullデバイスを閉じることができないという警告が表示されるまでdev.off())、ヒートマップコードを実行して問題が解決するかどうかを確認します。また、現在作業しているディレクトリに書き込み権限があることを確認しますか???

  3. @cuttlefishがコメントで述べたように、色のリストに名前を表示するためにカスタムの行/列の色を取得するには、アノテーションデータフレームのcolnamesを一致させる必要があります。

12色以上の場合

mymat <- matrix(rexp(720, rate=.1), ncol=12)
colnames(mymat) <- c(rep("treatment_1", 3), rep("treatment_2", 3), rep("treatment_3", 3), rep("treatment_4", 3))
rownames(mymat) <- paste("gene", 1:dim(mymat)[1], sep="_")

annotdf <- data.frame(row.names = rownames(mymat), 
                      category = rep(paste0("Category_", seq(12)), each=5) )  

newCols <- colorRampPalette(grDevices::Rainbow(length(unique(annotdf$category))))
mycolors <- newCols(length(unique(annotdf$category)))
names(mycolors) <- unique(annotdf$category)
mycolors <- list(category = mycolors)

pheatmap(mymat,
         color=greenred(75),
         scale="row",
         cluster_rows = FALSE,
         cluster_cols = FALSE,
         gaps_row=c(5,10,15,20,25,30,35,40,45,50, 55),
         gaps_col=c(3,6,9),
         cellheight = 6,
         cellwidth = 20,
         border_color=NA,
         fontsize_row = 6,
         main="Genes grouped by categories",
         filename = "TEST_12cat.png",
         annotation_row = annotdf,
         annotation_colors = mycolors
)

enter image description here

SessionInfo

R version 3.3.0 (2016-05-03)
Platform: x86_64-Apple-darwin13.4.0 (64-bit)
Running under: OS X 10.11.6 (El Capitan)

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] pheatmap_1.0.8     RColorBrewer_1.1-2 gplots_3.0.1      

loaded via a namespace (and not attached):
 [1] colorspace_1.3-0   scales_0.4.1       colorRamps_2.3     plyr_1.8.4         tools_3.3.0       
 [6] gtable_0.2.0       Rcpp_0.12.7        KernSmooth_2.23-15 gdata_2.17.0       grid_3.3.0        
[11] caTools_1.17.1     munsell_0.4.3      bitops_1.0-6       gtools_3.5.0    
5
emilliman5