【R】pheatmap行/列長文本注釋(annotation_row/col)后熱圖的邊框(border_color)消失?



用了這么久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我根本不用去動它。
image.png

加上行注釋后熱圖邊框消失了

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))

加上行注釋后,邊框莫名消失了。要不是因為影響直觀比較,我也不會去折騰。
image.png
不管我怎么設置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有什么解決之道嗎?
image.png

通過調節單元格長寬設置來解決

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))

image.png

這兩個參數默認NA,不知具體數值,只有通過不斷微調才能達到自己想要的效果。

感謝這個問題,讓我找到解決方法:https://geek-qa.imtqy.com/questions/384839/index.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM