使用pheatmap按行注释对数据进行排序?

艾莉森·格罗斯伯格

我正在尝试创建包含测试数据列和个别研究参与者行的热图。参与者可以分为三个不同的组。我想用三组注释该图,然后将每组中的数据聚类以了解它们之间的差异。

我是创建热图的新手,但是我无法使行注释起作用。我也不确定一旦注释生效,如何仅在每个组中进行聚类。我以为软件包“ pheatmap.type”可以工作,但不幸的是,它不适用于R版本4.0.2。

我无法发布确切的数据(机密信息),但是我已经附加了示例文件,我将描述到目前为止所做的工作并发布代码。我有一个数据框,其第一列为标签,其中包括参与者ID和组(使用row.names = 1进行了此设置),然后是12列,其中包含数字数据(无NA)。然后,我按行名称对数据进行排序,并使用scale函数缩放数据并生成矩阵。然后,我尝试通过以几种不同方式将组信息添加到数据框中来创建注释行。到目前为止,我尝试过的是:

#dataframe with Group and ID as row names and 12 numerical columns  

df_1_HM <- data.frame(df_1$Group_ID, df_1$Test1, df_1$Test2, df_1$Test3, df_1$Test4, df_1$Test5, df_1$Test6, df_1$Test7, df_1$Test8, df_1$Test9, df_1$Test10, df_1$Test11, df_1$Test12, row.names=1)

#ordering the dataframe so that the groups are in order 
df_1_HM_ordered <- df_1_HM[ order(row.names(df_1_HM)), ]

#Z-scoring (scaling) data 
df_HM_matrix_1 <- scale(df_1_HM)

#creating a color palette 
my_palette <- colorRampPalette(c("white", "grey", "black"))(n = 100)


#Plotting heatmap 
install.packages("gplots")
library(gplots)

#trying to plot the heatmap with annotation_row data 
#The method below does not work for me. The plot will run with no errors but does not actually plot - it ends up becoming a list of 4 with no data.

pheatmap(df_HM_matrix_1,
         scale="none",
         color=my_palette,
         fontsize=14, 
         annotation_row=annotation_row)

annotation_row = data.frame(
  df_Group = factor(rep(c("Group 1", "Group 2", "Group 3"), c(11, 10, 7)))
)

rownames(annotation_row) = paste("df_Group", 1:28, sep = "")

rownames(annotation_row) = rownames(df_HM_matrix_1) # name matching

#I also tried to use a dataframe with just the groups as column 1 to get row annotation 
pheatmap(df_HM_matrix_1,
         scale="none",
         color=my_palette,
         fontsize=14, 
         annotation_row=df_Group)

df_Group <- data.frame(df_1$Group, df_1$ID)

#Also tried using the select function to create a dataframe for the row annotation 
df_Group_1 <- select(df_1, Group) 

#When I use either of the data frame methods above I get the following error: Error in cut.default(a, breaks = 100) : 'x' must be numeric

对此的任何帮助都会很棒!!

这是示例数据:

structure(list(Group_ID = structure(1:28, .Label = c("Group1_10", 
"Group1_13", "Group1_15", "Group1_2", "Group1_20", "Group1_26", 
"Group1_27", "Group1_3", "Group1_6", "Group1_8", "Group2_1", 
"Group2_12", "Group2_14", "Group2_16", "Group2_21", "Group2_23", 
"Group2_25", "Group2_28", "Group2_7", "Group2_9", "Group3_11", 
"Group3_17", "Group3_18", "Group3_19", "Group3_24", "Group3_4", 
"Group3_5", "Group3_6"), class = "factor"), Test1 = c(1.44, 4.36, 
0.75, 0.59, 1.67, 0.41, 2.42, 0.57, 0.89, 0.45, 0.31, 1.56, 2.13, 
0.86, 0.12, 0.26, 1.47, 2.64, 3.92, 2.19, 0.43, 0.98, 1.93, 1.49, 
1.43, 2.58, 2.49, 2.64), Test2 = c(1.44, 4.36, 0.75, 0.59, 1.67, 
0.41, 2.42, 0.57, 0.89, 0.45, 0.31, 1.56, 2.13, 0.86, 0.12, 0.26, 
1.47, 2.64, 3.92, 2.19, 0.43, 0.98, 1.93, 1.49, 1.43, 2.58, 2.49, 
2.64), Test3 = c(1.44, 4.36, 0.75, 0.59, 1.67, 0.41, 2.42, 0.57, 
0.89, 0.45, 0.31, 1.56, 2.13, 0.86, 0.12, 0.26, 1.47, 2.64, 3.92, 
2.19, 0.43, 0.98, 1.93, 1.49, 1.43, 2.58, 2.49, 2.64), Test4 = c(1.44, 
4.36, 0.75, 0.59, 1.67, 0.41, 2.42, 0.57, 0.89, 0.45, 0.31, 1.56, 
2.13, 0.86, 0.12, 0.26, 1.47, 2.64, 3.92, 2.19, 0.43, 0.98, 1.93, 
1.49, 1.43, 2.58, 2.49, 0.31), Test5 = c(1.44, 4.36, 0.75, 0.59, 
1.67, 0.41, 2.42, 0.57, 0.89, 0.45, 0.31, 1.56, 2.13, 0.86, 0.12, 
0.26, 1.47, 2.64, 3.92, 2.19, 0.43, 0.98, 1.93, 1.49, 1.43, 2.58, 
2.49, 0.31), Test6 = c(1.44, 4.36, 0.75, 0.59, 1.67, 0.41, 2.42, 
0.57, 0.89, 0.45, 0.31, 1.56, 2.13, 0.86, 0.12, 0.26, 1.47, 2.64, 
3.92, 2.19, 0.43, 0.98, 1.93, 1.49, 1.43, 2.58, 2.49, 0.31), 
    Test7 = c(1.44, 4.36, 0.75, 0.59, 1.67, 0.41, 2.42, 0.57, 
    0.89, 0.45, 0.31, 1.56, 2.13, 0.86, 0.12, 0.26, 1.47, 2.64, 
    3.92, 2.19, 0.43, 0.98, 1.93, 1.49, 1.43, 2.58, 2.49, 1.49
    ), Test8 = c(1.44, 4.36, 0.75, 0.59, 1.67, 0.41, 2.42, 0.57, 
    0.89, 0.45, 0.31, 1.56, 2.13, 0.86, 0.12, 0.26, 1.47, 2.64, 
    3.92, 2.19, 0.43, 0.98, 1.93, 1.49, 1.43, 2.58, 2.49, 1.49
    ), Test9 = c(1.44, 4.36, 0.75, 0.59, 1.67, 0.41, 2.42, 0.57, 
    0.89, 0.45, 0.31, 1.56, 2.13, 0.86, 0.12, 0.26, 1.47, 2.64, 
    3.92, 2.19, 0.43, 0.98, 1.93, 1.49, 1.43, 2.58, 2.49, 1.49
    ), Test10 = c(1.44, 4.36, 0.75, 0.59, 1.67, 0.41, 2.42, 0.57, 
    0.89, 0.45, 0.31, 1.56, 2.13, 0.86, 0.12, 0.26, 1.47, 2.64, 
    3.92, 2.19, 0.43, 0.98, 1.93, 1.49, 1.43, 2.58, 2.49, 3.92
    ), Test11 = c(1.44, 4.36, 0.75, 0.59, 1.67, 0.41, 2.42, 0.57, 
    0.89, 0.45, 0.31, 1.56, 2.13, 0.86, 0.12, 0.26, 1.47, 2.64, 
    3.92, 2.19, 0.43, 0.98, 1.93, 1.49, 1.43, 2.58, 2.49, 3.92
    ), Test12 = c(1.44, 4.36, 0.75, 0.59, 1.67, 0.41, 2.42, 0.57, 
    0.89, 0.45, 0.31, 1.56, 2.13, 0.86, 0.12, 0.26, 1.47, 2.64, 
    3.92, 2.19, 0.43, 0.98, 1.93, 1.49, 1.43, 2.58, 2.49, 3.92
    )), class = "data.frame", row.names = c(NA, -28L))
维尔纳

为了使注释有效pheatmap,必须订购要素为此,添加ordered = TRUEfactor()

annotation_row = data.frame(df_Group = factor(rep(c("Group 1", "Group 2", "Group 3"), c(11, 10, 7)), ordered = TRUE))

您也可以as.ordered()用来完成相同的事情。

要按注释组对热图行进行排序,只需将参数添加cluster_rows = Fpheatmap()

pheatmap(df_HM_matrix_1,
         scale="none",
         color=my_palette,
         fontsize=14, 
         annotation_row=annotation_row,
         cluster_rows = F)

这是现在的样子: 在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

无法使用 ggplot 按降序对数据进行排序

使用orderBy按日期对数据进行排序仅按天数而不是年份对数据进行排序。[AngularJS]

按索引对数据框进行排序

按列对数据框进行排序

按日期对数据存储进行排序?

按数字对数据框进行排序

自然排序以按列名对数据框的列进行排序

我无法使用neDB数据库按字母顺序对数据进行排序

按列值对数据框中的行值进行排序

SQL ORACLE按行值分组(值相同,但重要的是对数据进行排序)

从多个文件中按行对数据框中的单列进行排序

通过拖动行使用jquery对数据表中的数据进行排序(行重新排序)

使用 gnuplot 对数据进行排序

使用 Realm 对数据进行排序

使用 javascript 对数据集进行排序

使用条件对数据框进行排序

使用动态列对数据进行排序

如何使用 React 中的功能组件按降序对数据进行排序并显示在表格中

如何在 Pandas 中使用 groupby 按 bin 对数据进行排序?

CMB2使用WP_Query在CPT上按日期对数据进行排序

使用本机 Javascript 按数据类型对数组进行排序

验证并格式化JSON,而无需使用'jsonlint'按字母顺序对数据进行排序

使用 Django 中的标题按字母顺序对数据库进行排序

如何避免按索引对数据透视表进行排序

按隐藏列对数据表进行排序

Redshift-按周对数据进行排序

按列对数据框中的某些行进行排序

如何按降序对数据表框架进行排序

按公共日期对数组数据进行排序