微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何以粗体和斜体标记热图的某些行名

如何解决如何以粗体和斜体标记热图的某些行名

我发现了一个有趣的函数,可以用粗体标记一些热图的行名。 我已将其调整为斜体,我想知道如何调整此代码,以便将某些行名称以粗体显示,而其他行名称以斜体显示。请找出这两个函数和热图(我使用找到的相同示例来解释该函数)。

library(pheatmap)
library(tidyverse)

# Create test matrix
test = matrix(rnorm(200),20,10)
test[1:10,seq(1,10,2)] = test[1:10,2)] + 3
test[11:20,seq(2,2)] = test[11:20,2)] + 2
test[15:20,2)] = test[15:20,2)] + 4
colnames(test) = paste("Test",1:10,sep = "")
rownames(test) = paste("Gene",1:20,sep = "")


make_bold_names <- function(mat,rc_fun,rc_names) {
  bold_names <- rc_fun(mat)
  ids <- rc_names %>% match(rc_fun(mat))
  ids %>%
    walk(
      function(i)
        bold_names[i] <<-
        bquote(bold(.(rc_fun(mat)[i]))) %>%
        as.expression()
    )
  bold_names
}


make_italic_names <- function(mat,rc_names) {
  italic_names <- rc_fun(mat)
  ids <- rc_names %>% match(rc_fun(mat))
  ids %>%
    walk(
      function(i)
        italic_names[i] <<-
        bquote(italic(.(rc_fun(mat)[i]))) %>%
        as.expression()
    )
  italic_names
}

pheatmap(
  test,labels_row = make_bold_names(test,rownames,c("Gene2","Gene5","Gene14")))



enter image description here

使用两个labels_row显然不起作用

pheatmap(
  test,"Gene14")),labels_row = make_italic_names(test,c("Gene3","Gene6","Gene10")))

解决方法

显然,您不能在函数中两次传递相同的参数。

相反,您可以以同时容纳粗体和斜体的方式编辑自定义函数。代码如下:

make_face_names <- function(mat,rc_fun,rc_names_b = NA,rc_names_i = NA) {
  f_names <- rc_fun(mat)
  ids_b <- rc_names_b %>% match(rc_fun(mat))
  ids_i <- rc_names_i %>% match(rc_fun(mat))
  ids_bi <- rc_names_i %>% match(rc_fun(mat))
  
  ids_b %>%
    walk(
      function(i)
        f_names[i] <<-
        bquote(bold(.(rc_fun(mat)[i]))) %>%
        as.expression()
    )
  ids_i %>%
    walk(
      function(i)
        f_names[i] <<-
        bquote(italic(.(rc_fun(mat)[i]))) %>%
        as.expression()
    )
  
  f_names
}


pheatmap(test,labels_row = make_face_names(test,rownames,rc_names_b = c("Gene2","Gene5","Gene14"),rc_names_i = c("Gene3","Gene6","Gene10")))

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。