用了這么久pheatmap包繪熱圖,自認為很嫻熟了。但今天遇到了一件詭異的事,折騰了我一兩個小時,記錄備忘。
不加行注釋時正常顯示
pheatmap(pld,
cluster_rows = F,
cluster_cols = F,
gaps_col = c(5,10,15,20),
annotation_col = annotaion_col,
color = colorRampPalette(colors = c("white","red"))(100))
這時一切正常,border_color我根本不用去動它。
加上行注釋后熱圖邊框消失了
pheatmap(pld,
cluster_rows = F,
cluster_cols = F,
gaps_col = c(5,10,15,20),
# border_color = "grey60",
annotation_col = annotaion_col,
annotation_row = annotation_row,
color = colorRampPalette(colors = c("white","red"))(100))
加上行注釋后,邊框莫名消失了。要不是因為影響直觀比較,我也不會去折騰。
不管我怎么設置border_color,長寬比輸出等操作都不管用。
甚至修改了下源碼,把行名放在了左邊展示還是不管用。
嘗試找原因
列注釋能正常顯示,行注釋時邊框消失了。列注釋和行注釋里代碼基本是一樣的,在我的數據里,列注釋比行注釋要短很多,分析是不是文本長度之故?
annotation_row$test <- c(rep(c("test1","test2"),each=36),"test3")
pheatmap(pld2,cluster_rows = F,cluster_cols = F,
gaps_col = c(5,10,15,20),
annotation_col = annotaion_col[-1],
annotation_row = annotation_row[3],
# border_color = "black",
color = colorRampPalette(colors = c("white","red"))(100))
把長長的行注釋改為簡短的文本后,邊框還真恢復了。說明就是這個原因,可能是文本太長以及樣本太多而將邊框壓縮掉了,但這不能通過圖片長寬來解決。那么pheatmap有什么解決之道嗎?
通過調節單元格長寬設置來解決
pheatmap中有cellwidth 和cellheight 兩個參數來調節單元格的長寬,通過改變這兩個值可以在長文本注釋情況下使邊框重現。
pheatmap(pld,
cluster_rows = F,
cluster_cols = F,
angle_col = 90,
annotation_colors = ann_colors,
gaps_col = c(5,10,15,20),
#border_color = "grey60",
annotation_col = annotaion_col,
annotation_row = annotation_row,
cellwidth = 11,cellheight = 9, #調節,解決熱圖區邊框不見的問題
color = colorRampPalette(colors = c("white","red"))(100))
這兩個參數默認NA,不知具體數值,只有通過不斷微調才能達到自己想要的效果。
感謝這個問題,讓我找到解決方法:https://geek-qa.imtqy.com/questions/384839/index.html