【Plot】pheatmapにlegend titleをつける

2023/05/11に公開

https://zenn.dev/rchiji/articles/451d2458877665

pheatmapパッケージでヒートマップを描く場合、カラーマップ(値の凡例)のタイトルをつけるオプションが無い。

demo data
df <- iris[,1:4]
anno <- iris[,5, drop=FALSE]

rownames(df) <- rownames(anno) <- as.character(seq(nrow(df)))
pheatmap::pheatmap(mat = df, annotation_row = anno, show_rownames = F)

ComplexHeatmap

ComplexHeatmapパッケージにもpheatmap()機能があり、pheatmapパッケージと同様のヒートマップを描くことができる。ComplexHeatmapのpheatmapであれば、name=引数でlegend titleを指定することができる。

name引数を使用
ComplexHeatmap::pheatmap(
  mat = df, 
  annotation_row = anno, 
  show_rownames = F, 
  name = "Score")

heatmap_legend_param =引数を使う方法もある。こちらはtitle名以外にも様々なlegend styleの調整が行える。

heatmap_legend_param引数を使用
ComplexHeatmap::pheatmap(
	mat = df, 
	annotation_row = anno, 
	show_rownames = F, 
	heatmap_legend_param = list(title = "Score",
	                            title_position = "leftcenter-rot",
	                            labels = c("Low", "Median", "High"),
	                            at = c(0,4,8),
	                            legend_height = grid::unit(30,"mm"),
	                            grid_width = grid::unit(3,"mm"),
	                            labels_gp = gpar(col = "blue", font = 4),
	                            border = "black")
	)

詳しくはこちらを参照

https://jokergoo.github.io/ComplexHeatmap-reference/book/legends.html


legend position

pheatmap::pheatmap()にはlegendの配置を変更する機能が無い。ComplexHeatmap::pheatmap()の場合は、plotオブジェクトを作って、draw()機能内のheatmap_legend_side = オプションから変更可能。

次の例ではパイプでplotデータをdraw()に渡している。

library(dplyr)

ComplexHeatmap::pheatmap(
	mat = df, 
	annotation_row = anno, 
	show_rownames = F, 
	heatmap_legend_param = list(title = "Score",
	                            title_position = "topcenter",
	                            legend_direction = "horizontal"
				    )
	) %>%  ComplexHeatmap::draw(heatmap_legend_side = "bottom")

ComplexHeatmap::Heatmap()であれば、draw()annotation_legend_side=オプションとheatmap_legend_size=オプションでそれぞれのlegendの位置を指定できるが、ComplexHeatmap::pheatmap()ではannotation_legend_side=オプションが効かなかった。

Discussion