我想在我为DGE制作的热图上标注我的病情。这段代码:
mat <- assay(rld)[topVarGenes,]
condition = c("black", "orange")
names(condition) = c("Dark", "Light")
ann_colors = list(condition = condition)
pheatmap(mat, color = colorRampPalette(rev(brewer.pal(n = 7, name = "RdYlBu")))(24), annotation_colors = ann_colors[1], border_color = "grey60", fontsize = 12, scale = "row")生成此热图:

但是,这个热图没有我想要的列上面标注的条件。所以我尝试了这段代码:
annotation <- data.frame(annotation)
pheatmap(mat, annotation = annotation, color = colorRampPalette(rev(brewer.pal(n = 7, name = "RdYlBu")))(24), border_color = "grey60", fontsize = 12, scale = "row")这几乎可以工作,但不使用我想要标记的条件的颜色(样本1-3是“暗”条件,并将被标记为黑色,样本4-6是“亮”条件,将被标记为橙色)。这张图还包括一个时髦的列标签,在条件下的样本,这是多余的,我不知道如何摆脱它。此外,data.frame(注释)是我导入的样本和相应条件的excel表。

将annotation_colors添加回代码:
pheatmap(mat, annotation = annotation, color = colorRampPalette(rev(brewer.pal(n = 7, name = "RdYlBu")))(24), annotation_colors = ann_colors, border_color = "grey60", fontsize = 12, scale = "row")产生此错误:Error in convert_annotations(annotation_col, annotation_colors) : Factor levels on variable condition do not match with annotation_colors
最后,我尝试了我在堆栈溢出post中找到的这段代码来定义注释,它让R使用正确的颜色,但它们的顺序不正确,因为%% 2==0导致它将每隔一个样本标记为“轻”,但我想不出还有什么可做的。代码如下:
annotation <- data.frame(condition = factor(1:6 %% 2==0, labels = c("Dark", "Light")))非常感谢您的帮助!
发布于 2020-04-03 03:47:07
在小插曲中不是很清楚,但你可以按照下面的步骤生成正确的data.frame和列表,没有理由不工作:
首先,我做一个像你这样的矩阵:
library(pheatmap)
M = cbind(matrix(runif(30,min=0,max=0.5),ncol=3),
matrix(runif(30,min=0.3,max=0.8),ncol=3))
rownames(M) = paste0("row",1:10)
colnames(M) = paste0("sample",1:6)假设前3列是“亮”的,后3列是“暗”的。我们为此创建一个data.frame,重要的是使行名与矩阵的列名称相匹配:
ann_column = data.frame(
condition = rep(c("light","dark"),each=3))
rownames(ann_col) = colnames(M)
ann_column
condition
1 light
2 light
3 light
4 dark
5 dark
6 dark现在,对于颜色,您需要一个列表,名称需要与上面的数据框匹配,并且在灯光内部,您可以指定哪个因子与什么颜色匹配,因此:
ann_colors = list(condition = c(dark="black",light="orange"))我们把它画出来:
pheatmap(M,annotation_col=ann_col,annotation_colors=ann_colors)

https://stackoverflow.com/questions/60996251
复制相似问题