如何用粗体标记热图的某些行名,用斜体标记其他行名
How to label some rowname of heatmap in bold and other in italic
我发现了一个有趣的函数,可以用粗体标记热图的一些行名。
我已经调整它以斜体做同样的事情,我想知道,我如何才能调整更多这段代码,以便将一些 rowname 粗体和斜体。请找到这两个函数和热图(我正在使用找到的相同示例来解释该函数)。
library(pheatmap)
library(tidyverse)
# Create test matrix
test = matrix(rnorm(200), 20, 10)
test[1:10, seq(1, 10, 2)] = test[1:10, seq(1, 10, 2)] + 3
test[11:20, seq(2, 10, 2)] = test[11:20, seq(2, 10, 2)] + 2
test[15:20, seq(2, 10, 2)] = test[15:20, seq(2, 10, 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_fun, 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")))
使用两个 labels_row 显然行不通
pheatmap(
test,
labels_row = make_bold_names(test, rownames, c("Gene2", "Gene5", "Gene14")),
labels_row = make_italic_names(test, rownames, 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")))
我发现了一个有趣的函数,可以用粗体标记热图的一些行名。 我已经调整它以斜体做同样的事情,我想知道,我如何才能调整更多这段代码,以便将一些 rowname 粗体和斜体。请找到这两个函数和热图(我正在使用找到的相同示例来解释该函数)。
library(pheatmap)
library(tidyverse)
# Create test matrix
test = matrix(rnorm(200), 20, 10)
test[1:10, seq(1, 10, 2)] = test[1:10, seq(1, 10, 2)] + 3
test[11:20, seq(2, 10, 2)] = test[11:20, seq(2, 10, 2)] + 2
test[15:20, seq(2, 10, 2)] = test[15:20, seq(2, 10, 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_fun, 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")))
使用两个 labels_row 显然行不通
pheatmap(
test,
labels_row = make_bold_names(test, rownames, c("Gene2", "Gene5", "Gene14")),
labels_row = make_italic_names(test, rownames, 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")))