首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pheatmap()条件分组中的小故障,以及其他混淆点

pheatmap()条件分组中的小故障,以及其他混淆点
EN

Stack Overflow用户
提问于 2020-04-03 00:19:27
回答 1查看 807关注 0票数 0

我想在我为DGE制作的热图上标注我的病情。这段代码:

代码语言:javascript
复制
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")

生成此热图:

但是,这个热图没有我想要的列上面标注的条件。所以我尝试了这段代码:

代码语言:javascript
复制
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添加回代码:

代码语言:javascript
复制
 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导致它将每隔一个样本标记为“轻”,但我想不出还有什么可做的。代码如下:

代码语言:javascript
复制
annotation <- data.frame(condition = factor(1:6 %% 2==0, labels = c("Dark", "Light")))

非常感谢您的帮助!

EN

回答 1

Stack Overflow用户

发布于 2020-04-03 03:47:07

在小插曲中不是很清楚,但你可以按照下面的步骤生成正确的data.frame和列表,没有理由不工作:

首先,我做一个像你这样的矩阵:

代码语言:javascript
复制
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,重要的是使行名与矩阵的列名称相匹配:

代码语言:javascript
复制
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

现在,对于颜色,您需要一个列表,名称需要与上面的数据框匹配,并且在灯光内部,您可以指定哪个因子与什么颜色匹配,因此:

代码语言:javascript
复制
ann_colors = list(condition = c(dark="black",light="orange"))

我们把它画出来:

代码语言:javascript
复制
pheatmap(M,annotation_col=ann_col,annotation_colors=ann_colors)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60996251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档