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)
Run Code Online (Sandbox Code Playgroud)
使用R package pheatmap绘制热图.有没有办法为输入矩阵中的NA分配颜色?看来NA默认为白色.例如:
library(pheatmap)
m<- matrix(c(1:100), nrow= 10)
m[1,1]<- NA
m[10,10]<- NA
pheatmap(m, cluster_rows=FALSE, cluster_cols=FALSE)
Run Code Online (Sandbox Code Playgroud)
谢谢
如何在此热图中将色标上的0点设置为白色?它是否使用breaks参数?
在以下代码中,white设置为3(或在比例附近):
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("Name", 1:20, sep = "")
pheatmap(test, color = colorRampPalette(c("yellow", "white", "blue"))(50))
Run Code Online (Sandbox Code Playgroud)
我正在探索 R 来分析我的基因表达数据。
我可以使用该pheatmap包创建一个漂亮的热图。但是,在不同颜色的框之间转换时,它会自动引入边框颜色,我在放大后可以看到该边框颜色。尽管添加了属性 ,但还是如此border_color = "NA"。是否可以获得连续变化的热图?谢谢。
我的代码:
pheatmapM <-pheatmap(datExprM, border_color = "NA", breaks = NULL, color = colorRampPalette(c("navy", "black", "yellow"))(50), cluster_rows = TRUE, cluster_cols = TRUE, scale = "row")
Run Code Online (Sandbox Code Playgroud)
正如您在下面看到的(缩放后),相邻的框由较浅的颜色分隔。
包装产生的热图的x轴标签pheatmap默认旋转270度.我需要让它们旋转90度.
我已跟踪该pheatmap()函数,并看到有一个内部(不可见)函数生成标签:
draw_colnames <- function (coln, ...)
{
m = length(coln)
x = (1:m)/m - 1/2/m
grid.text(coln, x = x, y = unit(0.96, "npc"), vjust = 0.5,
hjust = 0, rot = 270, gp = gpar(...))
}
Run Code Online (Sandbox Code Playgroud)
我只是改变了rot = 270通过rot = 90,并hjust = 0通过hjust = 1上述功能,使用下面的命令,和它的工作:
fixInNamespace("draw_colnames","pheatmap")
Run Code Online (Sandbox Code Playgroud)
但问题是fixInNamespace()永久修改包中的函数定义.我更乐意不改变原始函数定义,而是draw_colnames()在我需要的情况下暂时替换我自己的函数定义.
有什么解决方案吗?
我正在尝试使用rangingGrob()在相同的.jpg中绘制两个图。我才刚刚开始学习网格和grobs,我想我知道问题出在哪里:pheatmap是一个网格对象,包含grob对象,不允许我将其放在rangingGrob中。这是真的?
我是否需要以某种方式将qplot放在一个网格中,将pheatmap放在一个网格中,然后将那些网格放在一个新的网格中?
library(grid)
library(gridExtra)
library(pheatmap)
library(ggplot2)
hmdat=rbind(c(1,2,3),
c(3,4,5),
c(5,6,7))
hm=pheatmap(hmdat)
qp=qplot(1,1)
lm=rbind(c(1,2,2),
c(1,2,2))
jpeg("plots.jpg")
arrangeGrob(qp,hm, layout_matrix=lm)
dev.off()
Run Code Online (Sandbox Code Playgroud)
上面的代码片段在使用时运行良好
arrangeGrob(qp,qp, layout_matrix=lm)
Run Code Online (Sandbox Code Playgroud) 在回答了这个问题之后,我发现了pheatmap函数(与heatmap.2相比,它可以为我提供更多的控制权)。
我有两个问题:
1-我无法更改注释(类别)的颜色
2-即使我将输出保存在png文件中,图形窗口也会不断弹出
这是我的MWE:
library(pheatmap)
library(RColorBrewer)
cols <- colorRampPalette(brewer.pal(9, "Set1"))
mymat <- matrix(rexp(600, rate=.1), ncol=12)
colnames(mymat) <- c(rep("treatment_1", 3), rep("treatment_2", 3), rep("treatment_3", 3), rep("treatment_4", 3))
rownames(mymat) <- paste("gene", 1:dim(mymat)[1], sep="_")
annotdf <- data.frame(row.names = paste("gene", 1:dim(mymat)[1], sep="_"), category = c(rep("CATEGORY_1", 10), rep("CATEGORY_2", 10), rep("CATEGORY_3", 10), rep("CATEGORY_4", 10), rep("CATEGORY_5", 10)))
mycolors <- cols(length(unique(annotdf$category)))
names(mycolors) <- unique(annotdf$category)
mycolors <- list(mycolors = mycolors)
pheatmap(mymat,
color=greenred(75),
scale="row",
cluster_rows = FALSE,
cluster_cols = FALSE,
gaps_row=c(10,20,30,40),
gaps_col=c(3,6,9),
cellheight = 6,
cellwidth …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 pheatmap 包制作一个图形。我想按我正在使用的注释对数据进行分组,但它不会分组在一起。
我的数据在这里:
sub_samp <- structure(c(1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0,
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1,
0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, …Run Code Online (Sandbox Code Playgroud) 我想知道是否有人知道允许对热图进行部分行标记的包。我目前正在使用 pheatmap() 来构建我的热图,但我可以使用任何具有此功能的包。
我有很多行差异表达基因的图,我想标记其中的一个子集。有两个主要的事情需要考虑(我能想到的):
下面是一个部分解决方案的例子,它实际上只能达到一半,但我希望能说明我想要做的事情。
set.seed(1)
require(pheatmap)
require(RColorBrewer)
require(grid)
### Data to plot
data_mat <- matrix(sample(1:10000, 300), nrow = 50, ncol = 6)
rownames(data_mat) <- paste0("Gene", 1:50)
colnames(data_mat) <- c(paste0("A", 1:3), paste0("B", 1:3))
### Set how many genes to annotate
### TRUE - make enough labels that some overlap
### FALSE - no overlap
tooMany <- T
### Select a few genes to annotate
if (tooMany) {
sigGenes_v <- paste0("Gene", c(5,20,26,42,47,16,28))
newMain_v <- "Too Many Labels"
} else …Run Code Online (Sandbox Code Playgroud) 可重现的数据:
data(crabs, package = "MASS")
df <- crabs[-(1:3)]
set.seed(12345)
df$GRP <- kmeans(df, 4)$cluster
df.order <- dplyr::arrange(df, GRP)
Run Code Online (Sandbox Code Playgroud)
数据说明:
df有 5 个数值变量。我根据这 5 个属性进行了 K-means 算法,并生成了一个GRP具有 4 个级别的新分类变量。接下来,我订购了它GRP并命名了它df.order。
我做了什么pheatmap:
## 5 numerical variables for coloring
colormat <- df.order[c("FL", "RW", "CL", "CW", "BD")]
## Specify the annotation variable `GRP` shown on left side of the heatmap
ann_row <- df.order["GRP"]
## gap indices
gapRow <- cumsum(table(ann_row$GRP))
library(pheatmap)
pheatmap(colormat, cluster_rows = F, show_rownames = F, …Run Code Online (Sandbox Code Playgroud)