如何在R中透视DataFrame以绘制药物为列、Score为行的热力图?
绘制指定结构的热力图
首先需要调整数据结构,将Score作为热力图的行标签,药物变量作为列,对应的0/1值作为热力图的填充数据。可以按以下步骤实现:
1. 数据预处理
先把Score列设置为数据框的行名,然后提取所有药物列转换成矩阵(热力图函数通常需要矩阵格式输入):
# 设置行名为Score rownames(df) <- df$Score # 提取药物列并转为矩阵 drug_matrix <- as.matrix(df[, grep("Drug", colnames(df))]) # 按Score排序(可选,让行按Score从小到大排列) drug_matrix <- drug_matrix[order(as.numeric(rownames(drug_matrix))), ]
2. 绘制热力图
使用R基础包的heatmap()函数绘制,调整参数让药物作为列、Score作为行,样式匹配需求:
heatmap(drug_matrix, Rowv = NA, Colv = NA, # 不进行聚类排序 scale = "none", # 不缩放数据 col = c("#ffffff", "#2c3e50"), # 0用白色,1用深色,可自定义 labRow = rownames(drug_matrix), # 显示Score作为行标签 labCol = colnames(drug_matrix), # 显示药物作为列标签 main = "药物-得分热力图", xlab = "药物", ylab = "得分")
关键参数说明
Rowv = NA和Colv = NA:关闭行和列的聚类排序,保持原始的药物列顺序和排序后的Score行顺序col:自定义颜色映射,这里用白色代表0(未使用药物),深色代表1(使用药物),可根据需求替换颜色代码labRow/labCol:确保行和列显示对应的Score和药物名称
如果需要更美观的样式,也可以使用pheatmap包,代码如下:
# 先安装并加载包 # install.packages("pheatmap") library(pheatmap) pheatmap(drug_matrix, cluster_rows = FALSE, cluster_cols = FALSE, color = c("#ffffff", "#2c3e50"), main = "药物-得分热力图", labels_row = rownames(drug_matrix), labels_col = colnames(drug_matrix))
内容的提问来源于stack exchange,提问作者Jamie
相关产品推荐
相关产品推荐

