- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Pheatmap library(pheatmap)
采用 annotation_colors
在每个热图列的顶部添加标题 ID 颜色。
我想添加白色作为带有边框的列标题颜色。边框可以通过 border_color
添加,但此函数也会为整个热图绘制边框。
以下是我到目前为止所做的事情。
library(pheatmap)
set.seed(123)
df<-data.frame( matrix(sample(30), ncol = 5))
colnames(df)<-LETTERS[1:5]
subj<-c("P1", "P2","P3", "T1", "T2","T3")
rownames(df)<-subj
aka2 = data.frame(ID = factor(rep(c("Pat","Trea"), each=3)))
rownames(aka2)<-subj
aka3 = list(ID = c(Pat = "white", Trea="blue"))
pheatmap(t(scale(df)),
annotation_col = aka2,
annotation_colors = aka3[1],
annotation_legend = FALSE,
gaps_col = 3,
show_colnames = T, show_rownames = T, cluster_rows = F,
cluster_cols = F, legend = TRUE,
clustering_distance_rows = "euclidean", border_color = FALSE)
最佳答案
我非常努力地编辑grobs
以仅在注释上添加边框颜色,但我认为唯一的方法是修改pheatmap
函数以及底层的heatmap_motor
。这是 pheatmap2
和 heatmap_motor2
函数。唯一的变化是 pheatmap2
调用 heatmap_motor2
以及 heatmap_motor2
中的这一行 border_color="gray"
。您可以在 heatmap_motor2
的大约 2/3 处找到它。
pheatmap2
pheatmap2 <-function (mat, color = colorRampPalette(rev(brewer.pal(n = 7,
name = "RdYlBu")))(100), kmeans_k = NA, breaks = NA, border_color = "grey60",
cellwidth = NA, cellheight = NA, scale = "none", cluster_rows = TRUE,
cluster_cols = TRUE, clustering_distance_rows = "euclidean",
clustering_distance_cols = "euclidean", clustering_method = "complete",
clustering_callback = identity2, cutree_rows = NA, cutree_cols = NA,
treeheight_row = ifelse(cluster_rows, 50, 0), treeheight_col = ifelse(cluster_cols,
50, 0), legend = TRUE, legend_breaks = NA, legend_labels = NA,
annotation_row = NA, annotation_col = NA, annotation = NA,
annotation_colors = NA, annotation_legend = TRUE, drop_levels = TRUE,
show_rownames = T, show_colnames = T, main = NA, fontsize = 10,
fontsize_row = fontsize, fontsize_col = fontsize, display_numbers = F,
number_format = "%.2f", number_color = "grey30", fontsize_number = 0.8 *
fontsize, gaps_row = NULL, gaps_col = NULL, labels_row = NULL,
labels_col = NULL, filename = NA, width = NA, height = NA,
silent = FALSE, ...)
{
if (is.null(labels_row)) {
labels_row = rownames(mat)
}
if (is.null(labels_col)) {
labels_col = colnames(mat)
}
mat = as.matrix(mat)
if (scale != "none") {
mat = scale_mat(mat, scale)
if (is.na2(breaks)) {
breaks = generate_breaks(mat, length(color), center = T)
}
}
if (!is.na(kmeans_k)) {
km = kmeans(mat, kmeans_k, iter.max = 100)
mat = km$centers
t = table(km$cluster)
labels_row = sprintf("Cluster: %s Size: %d", names(t),
t)
}
else {
km = NA
}
if (is.matrix(display_numbers) | is.data.frame(display_numbers)) {
if (nrow(display_numbers) != nrow(mat) | ncol(display_numbers) !=
ncol(mat)) {
stop("If display_numbers provided as matrix, its dimensions have to match with mat")
}
display_numbers = as.matrix(display_numbers)
fmat = matrix(as.character(display_numbers), nrow = nrow(display_numbers),
ncol = ncol(display_numbers))
fmat_draw = TRUE
}
else {
if (display_numbers) {
fmat = matrix(sprintf(number_format, mat), nrow = nrow(mat),
ncol = ncol(mat))
fmat_draw = TRUE
}
else {
fmat = matrix(NA, nrow = nrow(mat), ncol = ncol(mat))
fmat_draw = FALSE
}
}
if (cluster_rows) {
tree_row = cluster_mat(mat, distance = clustering_distance_rows,
method = clustering_method)
tree_row = clustering_callback(tree_row, mat)
mat = mat[tree_row$order, , drop = FALSE]
fmat = fmat[tree_row$order, , drop = FALSE]
labels_row = labels_row[tree_row$order]
if (!is.na(cutree_rows)) {
gaps_row = find_gaps(tree_row, cutree_rows)
}
else {
gaps_row = NULL
}
}
else {
tree_row = NA
treeheight_row = 0
}
if (cluster_cols) {
tree_col = cluster_mat(t(mat), distance = clustering_distance_cols,
method = clustering_method)
tree_col = clustering_callback(tree_col, t(mat))
mat = mat[, tree_col$order, drop = FALSE]
fmat = fmat[, tree_col$order, drop = FALSE]
labels_col = labels_col[tree_col$order]
if (!is.na(cutree_cols)) {
gaps_col = find_gaps(tree_col, cutree_cols)
}
else {
gaps_col = NULL
}
}
else {
tree_col = NA
treeheight_col = 0
}
attr(fmat, "draw") = fmat_draw
if (!is.na2(legend_breaks) & !is.na2(legend_labels)) {
if (length(legend_breaks) != length(legend_labels)) {
stop("Lengths of legend_breaks and legend_labels must be the same")
}
}
if (is.na2(breaks)) {
breaks = generate_breaks(as.vector(mat), length(color))
}
if (legend & is.na2(legend_breaks)) {
legend = grid.pretty(range(as.vector(breaks)))
names(legend) = legend
}
else if (legend & !is.na2(legend_breaks)) {
legend = legend_breaks[legend_breaks >= min(breaks) &
legend_breaks <= max(breaks)]
if (!is.na2(legend_labels)) {
legend_labels = legend_labels[legend_breaks >= min(breaks) &
legend_breaks <= max(breaks)]
names(legend) = legend_labels
}
else {
names(legend) = legend
}
}
else {
legend = NA
}
mat = scale_colours(mat, col = color, breaks = breaks)
if (is.na2(annotation_col) & !is.na2(annotation)) {
annotation_col = annotation
}
if (!is.na2(annotation_col)) {
annotation_col = annotation_col[colnames(mat), , drop = F]
}
if (!is.na2(annotation_row)) {
annotation_row = annotation_row[rownames(mat), , drop = F]
}
annotation = c(annotation_row, annotation_col)
annotation = annotation[unlist(lapply(annotation, function(x) !is.na2(x)))]
if (length(annotation) != 0) {
annotation_colors = generate_annotation_colours(annotation,
annotation_colors, drop = drop_levels)
}
else {
annotation_colors = NA
}
if (!show_rownames) {
labels_row = NULL
}
if (!show_colnames) {
labels_col = NULL
}
gt = heatmap_motor2(mat, border_color = border_color, cellwidth = cellwidth,
cellheight = cellheight, treeheight_col = treeheight_col,
treeheight_row = treeheight_row, tree_col = tree_col,
tree_row = tree_row, filename = filename, width = width,
height = height, breaks = breaks, color = color, legend = legend,
annotation_row = annotation_row, annotation_col = annotation_col,
annotation_colors = annotation_colors, annotation_legend = annotation_legend,
main = main, fontsize = fontsize, fontsize_row = fontsize_row,
fontsize_col = fontsize_col, fmat = fmat, fontsize_number = fontsize_number,
number_color = number_color, gaps_row = gaps_row, gaps_col = gaps_col,
labels_row = labels_row, labels_col = labels_col, ...)
if (is.na(filename) & !silent) {
grid.newpage()
grid.draw(gt)
}
invisible(list(tree_row = tree_row, tree_col = tree_col,
kmeans = km, gtable = gt))
}
heatmap_motor2
heatmap_motor2 <-function (matrix, border_color, cellwidth, cellheight, tree_col,
tree_row, treeheight_col, treeheight_row, filename, width,
height, breaks, color, legend, annotation_row, annotation_col,
annotation_colors, annotation_legend, main, fontsize, fontsize_row,
fontsize_col, fmat, fontsize_number, number_color, gaps_col,
gaps_row, labels_row, labels_col, ...)
{
lo = lo(coln = labels_col, rown = labels_row, nrow = nrow(matrix),
ncol = ncol(matrix), cellwidth = cellwidth, cellheight = cellheight,
treeheight_col = treeheight_col, treeheight_row = treeheight_row,
legend = legend, annotation_col = annotation_col, annotation_row = annotation_row,
annotation_colors = annotation_colors, annotation_legend = annotation_legend,
main = main, fontsize = fontsize, fontsize_row = fontsize_row,
fontsize_col = fontsize_col, gaps_row = gaps_row, gaps_col = gaps_col,
...)
res = lo$gt
mindim = lo$mindim
if (!is.na(filename)) {
if (is.na(height)) {
height = convertHeight(gtable_height(res), "inches",
valueOnly = T)
}
if (is.na(width)) {
width = convertWidth(gtable_width(res), "inches",
valueOnly = T)
}
r = regexpr("\\.[a-zA-Z]*$", filename)
if (r == -1)
stop("Improper filename")
ending = substr(filename, r + 1, r + attr(r, "match.length"))
f = switch(ending, pdf = function(x, ...) pdf(x, ...),
png = function(x, ...) png(x, units = "in", res = 300,
...), jpeg = function(x, ...) jpeg(x, units = "in",
res = 300, ...), jpg = function(x, ...) jpeg(x,
units = "in", res = 300, ...), tiff = function(x,
...) tiff(x, units = "in", res = 300, compression = "lzw",
...), bmp = function(x, ...) bmp(x, units = "in",
res = 300, ...), stop("File type should be: pdf, png, bmp, jpg, tiff"))
f(filename, height = height, width = width)
gt = heatmap_motor(matrix, cellwidth = cellwidth, cellheight = cellheight,
border_color = border_color, tree_col = tree_col,
tree_row = tree_row, treeheight_col = treeheight_col,
treeheight_row = treeheight_row, breaks = breaks,
color = color, legend = legend, annotation_col = annotation_col,
annotation_row = annotation_row, annotation_colors = annotation_colors,
annotation_legend = annotation_legend, filename = NA,
main = main, fontsize = fontsize, fontsize_row = fontsize_row,
fontsize_col = fontsize_col, fmat = fmat, fontsize_number = fontsize_number,
number_color = number_color, labels_row = labels_row,
labels_col = labels_col, gaps_col = gaps_col, gaps_row = gaps_row,
...)
grid.draw(gt)
dev.off()
return(gt)
}
if (mindim < 3)
border_color = NA
if (!is.na(main)) {
elem = draw_main(main, fontsize = 1.3 * fontsize, ...)
res = gtable_add_grob(res, elem, t = 1, l = 3, name = "main")
}
if (!is.na2(tree_col) & treeheight_col != 0) {
elem = draw_dendrogram(tree_col, gaps_col, horizontal = T)
res = gtable_add_grob(res, elem, t = 2, l = 3, name = "col_tree")
}
if (!is.na2(tree_row) & treeheight_row != 0) {
elem = draw_dendrogram(tree_row, gaps_row, horizontal = F)
res = gtable_add_grob(res, elem, t = 4, l = 1, name = "row_tree")
}
elem = draw_matrix(matrix, border_color, gaps_row, gaps_col,
fmat, fontsize_number, number_color)
res = gtable_add_grob(res, elem, t = 4, l = 3, clip = "off",
name = "matrix")
if (length(labels_col) != 0) {
pars = list(labels_col, gaps = gaps_col, fontsize = fontsize_col,
...)
elem = do.call(draw_colnames, pars)
res = gtable_add_grob(res, elem, t = 5, l = 3, clip = "off",
name = "col_names")
}
if (length(labels_row) != 0) {
pars = list(labels_row, gaps = gaps_row, fontsize = fontsize_row,
...)
elem = do.call(draw_rownames, pars)
res = gtable_add_grob(res, elem, t = 4, l = 4, clip = "off",
name = "row_names")
}
if (!is.na2(annotation_col)) {
converted_annotation = convert_annotations(annotation_col,
annotation_colors)
elem = draw_annotations(converted_annotation, border_color="gray", #Modified here
gaps_col, fontsize, horizontal = T)
res = gtable_add_grob(res, elem, t = 3, l = 3, clip = "off",
name = "col_annotation")
elem = draw_annotation_names(annotation_col, fontsize,
horizontal = T)
res = gtable_add_grob(res, elem, t = 3, l = 4, clip = "off",
name = "row_annotation_names")
}
if (!is.na2(annotation_row)) {
converted_annotation = convert_annotations(annotation_row,
annotation_colors)
elem = draw_annotations(converted_annotation, border_color,
gaps_row, fontsize, horizontal = F)
res = gtable_add_grob(res, elem, t = 4, l = 2, clip = "off",
name = "row_annotation")
if (length(labels_col) != 0) {
elem = draw_annotation_names(annotation_row, fontsize,
horizontal = F)
res = gtable_add_grob(res, elem, t = 5, l = 2, clip = "off",
name = "row_annotation_names")
}
}
annotation = c(annotation_col[length(annotation_col):1],
annotation_row[length(annotation_row):1])
annotation = annotation[unlist(lapply(annotation, function(x) !is.na2(x)))]
if (length(annotation) > 0 & annotation_legend) {
elem = draw_annotation_legend(annotation, annotation_colors,
border_color, fontsize = fontsize, ...)
t = ifelse(is.null(labels_row), 4, 3)
res = gtable_add_grob(res, elem, t = t, l = 6, b = 5,
clip = "off", name = "annotation_legend")
}
if (!is.na2(legend)) {
elem = draw_legend(color, breaks, legend, fontsize = fontsize,
...)
t = ifelse(is.null(labels_row), 4, 3)
res = gtable_add_grob(res, elem, t = t, l = 5, b = 5,
clip = "off", name = "legend")
}
return(res)
}
将这两个新函数添加到 pheatmap
环境中非常重要。 pheatmap
使用只能在其自己的环境中找到的函数。
environment(pheatmap2) <- asNamespace('pheatmap')
environment(heatmap_motor2) <- asNamespace('pheatmap')
使用pheatmap2
为注释添加灰色边框:
library(pheatmap)
set.seed(123)
df<-data.frame( matrix(sample(30), ncol = 5))
colnames(df)<-LETTERS[1:5]
subj<-c("P1", "P2","P3", "T1", "T2","T3")
rownames(df)<-subj
aka2 = data.frame(ID = factor(rep(c("Pat","Trea"), each=3)))
rownames(aka2)<-subj
aka3 = list(ID = c(Pat = "white", Trea="blue"))
pheatmap2(t(scale(df)),
annotation_col = aka2,
annotation_colors = aka3[1], #aka3[1]
annotation_legend = FALSE,
gaps_col = 3,
show_colnames = T, show_rownames = T, cluster_rows = F,
cluster_cols = F, legend = TRUE,
clustering_distance_rows = "euclidean", border_color = FALSE)
关于r - Pheatmap 注释颜色和边框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33292067/
Pheatmap library(pheatmap) 采用 annotation_colors 在每个热图列的顶部添加标题 ID 颜色。 我想添加白色作为带有边框的列标题颜色。边框可以通过 borde
考虑矩阵: test = matrix(rnorm(200), 20, 10) test[1:10, seq(1, 10, 2)] = test[1:10, seq(1, 10, 2)] + 3 te
我需要使用函数 'pheatmap' 制作一个热图,使用 UPGMA 和 1-pearson 相关作为距离度量。我的教授声称这是默认的距离度量,尽管在我的情况下它使用“欧几里得”作为距离度量。 euc
我正在使用 pheatmap 包。默认情况下,它将绘图绘制到屏幕上。就我而言,这意味着在 R studio 的 R markdown notebook 中输出。但我也想保存到文件中。如果我将它保存到一
我正在使用 pheatmap 创建值的热图,并希望使用矩阵中 z 值的单位来标记图例。在此示例中,我希望图例的顶部显示温度 [°C]。我已阅读 guidelines here对于 pheatmap,似
我正在使用 绘制热图pheatmap (Documentation)。我正在以一种相当简单的方式绘制一个矩阵: pheatmap(mat, annotation_col=df, labels_col=
使用R包pheatmap绘制热图。有没有办法为输入矩阵中的 NA 分配颜色?看来 NA 默认情况下是白色的。例如: library(pheatmap) m<- matrix(c(1:100), nro
可重现的数据: data(crabs, package = "MASS") df 我对 pheatmap 做了什么: ## 5 numerical variables for coloring co
我需要在我的 pheatmp 中使用并显示星星的重要性,我使用了以下方法。正如您所看到的,图中报告的星星跨越了单元格边界。有没有办法将其置于单元格中心? test_vals <- matrix(rno
我正在尝试使用 layout 绘制多面板图,其中一个面板是热图放置地块。我一直在用 pheatmap 绘制热图它提供了一个非常方便的配色方案等等。 pheatmap的代码有货 here . 当我尝试使
我正在使用 pheatmap 制作热图R 中的包。默认情况下,行名显示在热图的右侧。有谁知道如何将它们移到左侧? 其他一些包似乎有这方面的功能,例如 row_names_side = "left"在
我正在使用 pheatmap() 创建热图函数使用以下代码: library(pheatmap) pheatmap((data_matrix[,1:11]), cluster_rows = F, cl
我正在使用带有大数据的 pheatmap。我的目的是对行和列进行聚类并分析主要聚类。我上传数据表并执行热图如下: library (pheatmap) data<-read.table ("exa
我创建了一个矩阵,现在我想使用 pheatmap 绘制热图,同时保留矩阵行的顺序。我想关闭集群。目前,当我运行以下脚本时,pheatamp 正在对行进行聚类: tissuedata<-read
比方说: m1<-matrix(rnorm(1000),ncol=100) 并定义颜色: cols = colorRampPalette(c("white", "red"))(30) 我正在生成一个热
library(pheatmap) another<-read.table("~/Desktop/tcga3dcategorized.csv",sep=',',header=FALSE) test<-
我正在绘制一组 15 个样本,分为 A、B、C 三组,热图将它们排序为 C、A、B。(我读过这是因为它在右侧绘制了集群具有最强的相似性)。我想对簇进行排序,以便簇的叶子被视为 A、B、C(因此重新组织
我有以下数据框: library(pheatmap) library(RColorBrewer) dat cow dog snake ca
如何在此热图中将色标上的 0 点设置为白色?它使用 breaks 参数吗? 在以下代码中,白色设置为 3(或刻度附近): test = matrix(rnorm(200), 20, 10) test[
跟进this question ,我找到了 pheatmap 函数(它为我提供了比 heatmap.2 更多的控制权)。 但是我有两个问题: 1-我无法更改注释(类别)的颜色 2- 即使我将输出保存在
我是一名优秀的程序员,十分优秀!