(R语言)-8-热图的绘制

本文详细介绍了如何使用R语言中的heatmap(),heatmap.2()和pheatmap函数来绘制热图,包括颜色设置、数据预处理(如标准化)以及添加颜色条、图例和分组信息。展示了如何操作矩阵数据并展示不同包的功能特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 重点

heatmap(),heatmap.2(),pheatmap()绘制热图,数据为矩阵

colorRamPalette生成渐变色,并在图中增加颜色条

heatmap(scale=)对图进行标准化,放大各数据的区别

#热图的绘制颜色的深浅表示基因表达量的大小(数据为数值矩阵)
#heatmap包
example(heatmap)#heatmap包用于绘制热图
getwd()
setwd("C:/Users/用户名/Desktop/")
m <- read.csv("Rdata/heatmap.csv",header = T,row.names = 1)#20个样品的基因表达量数据
m
class(m)
x <- as.matrix(m)#数据类型为矩阵
heatmap(x)#直接显示热图
heatmap(t(x))#将样品名与基因名互换位置
heatmap(x,col=c("green","red"))#默认是暖色调
yanse <- colorRampPalette(c("red","black","green"))(nrow(x))#随机生成渐变色,后边的nrow(x)是设置渐变的个数
heatmap(x,col=yanse)
heatmap(x,col=yanse,ColSideColors = colorRampPalette(c("red","black","green"))(ncol(x)))#设置颜色条,会在热图上显示
heatmap(x,col=yanse,Rowv=NA)#取消按行聚类Colv=NA
#若矩阵数值差别过大,可用scale进行中心化和标准化,让图中区别更明显
heatmap(state.x77)
heatmap(state.x77,scale = "col")#按列进行缩放,使图像更清晰
#heatmap.2包
install.packages("gplots")
library(gplots)
example("heatmap.2")#相比于heatmap多了图例和分割线
m <- read.csv("Rdata/heatmap.csv",header = T,row.names = 1)#20个样品的基因表达量数据
m
class(m)
x <- as.matrix(m)
head(x)
heatmap.2(x)
heatmap.2(x,key=F)#是否使用图例
heatmap.2(x,symkey = F)#使用图例是否对称
heatmap.2(x,symkey = T)
heatmap.2(x,symkey = T,density.info  = "none")#图例上的刻度
heatmap.2(x,symkey = T,trace  = "none")#是否取消图和图例的线
heatmap.2(x,symkey = T,tracecol="blue")#改变线的颜色
#pheatmap包
install.packages("pheatmap")
library(pheatmap)
getwd()
setwd("C:/Users/用户名/Desktop/")
m <- read.csv("Rdata/heatmap.csv",header = T,row.names = 1)#20个样品的基因表达量数据
m
x <- as.matrix(m)
x
pheatmap(x)
colnames(x)
#将20个数据分成五组
annotation_col <- data.frame(CellType=factor(rep(c("N1","T1","N2","T2"),each=5))) #建立一个数据框
annotation_col
rownames(annotation_col)
rownames(annotation_col) <- colnames(x)#将分好的组名与数据名对应
annotation_col
pheatmap(x,annotation_col =annotation_col )#增加分组信息和分组颜色条,会在图中增加分组的颜色条
pheatmap(x,annotation_col =annotation_col,display_numbers = T,number_format = "0.2f%" )#display_numbers在热图上显示数字,number_format设置有效数字保留两位小数

 

 

heatmap()结果如下

heatmap.2结果如下

pheatmap结果如下 

<think>嗯,用户想用R语言对基因表达数据做层次聚类分析。首先,我需要回忆一下层次聚类的基本步骤和相关R函数。层次聚类通常分为数据预处理、距离计算、聚类算法选择、树状绘制和结果分析这几个步骤。 数据预处理方面,基因表达数据通常需要标准化,比如使用scale函数进行Z-score标准化,或者进行归一化处理。因为基因表达量的量纲可能不同,标准化能消除量纲影响。然后,距离计算的话,常用的有欧氏距离、曼哈顿距离、相关性距离等。R里dist函数可以计算欧氏距离,但如果是相关性距离,可能需要用1 - cor()来转换。 接下来是聚类算法,层次聚类有聚合式和分裂式,常用的聚合式方法有ward.D、ward.D2、single、complete、average等。hclust函数里的method参数需要指定这些方法。比如ward.D2通常效果比较好,能减少噪声影响。 然后,绘制树状可以用plot函数,调整参数让形更清晰。比如调整cex参数缩小标签字体,避免重叠。切割树状得到聚类结果的话,cutree函数可以指定k值或者高度。这里可能需要用户根据具体情况选择分多少类,或者用动态树切割的方法。 另外,用户的数据是基因表达数据,可能矩阵是行是基因,列是样本,需要注意转置。比如如果要对样本聚类,可能需要对数据转置后再计算距离。如果数据量很大,层次聚类可能会比较慢,这时候可能需要考虑其他方法,比如k-means,但用户明确要求层次聚类。 还要考虑数据是否有缺失值,需要提前处理,比如用na.omit删除缺失值,或者用插补方法填补。另外,是否需要过滤低表达的基因,比如过滤掉在所有样本中表达量都很低的基因,减少噪声。 在可视化方面,除了树状,还可以结合,用heatmap函数同时展示聚类和表达模式。的颜色调整、行列聚类是否显示等参数设置也需要考虑。 可能遇到的问题包括计算距离时内存不足,特别是基因数量大的时候。这时候可以考虑抽样或者使用更高效的距离计算方法。另外,聚类结果的解释需要结合物学背景,比如特定的基因是否在同一个功能类别里,或者样本是否对应不同的实验条件。 用户的需求是教程性质的,所以步骤要详细,代码示例要完整,可能需要从数据读取开始,比如用read.csv加载数据,确保数据结构正确。然后逐步讲解每个步骤,并解释参数的选择原因。比如为什么选择ward.D2方法,如何确定聚类数目等。 引用文献的话,用户提供的引用[1]和[2]提到了聚类分析的应用和局限性,可以在回答中提到数据预处理的重要性,以及结果解释需要结合实际背景,引用这些内容。比如在预处理步骤强调噪声处理的重要性,引用[2]的噪声数据影响部分。 最后,可能需要提醒用户层次聚类的结果可能受参数影响,建议尝试不同方法比较结果,或者用主成分分析先降维,再聚类,如引用[1]中的主成分分析步骤。此外,成的相关问题可以涉及层次聚类的优缺点、不同距离度量的选择、聚类结果验证方法等,帮助用户进一步学习。</think>以下是使用R语言进行基因表达数据层次聚类分析的详细步骤教程: --- ### 一、数据预处理 1. **数据加载与清洗** ```r # 读取基因表达矩阵(行为基因,列为样本) expr_data <- read.csv("gene_expression.csv", row.names = 1) # 过滤低表达基因(例如过滤在所有样本中表达量<1的基因) expr_filtered <- expr_data[rowSums(expr_data) >= 1, ] # 标准化处理(Z-score标准化) expr_scaled <- scale(t(expr_filtered)) # 转置矩阵:若需对样本聚类则转置 ``` --- ### 二、距离矩阵计算 $$ \text{欧氏距离公式:} D_{ij} = \sqrt{\sum_{k=1}^n (x_{ik} - x_{jk})^2} $$ ```r # 计算距离矩阵(可选择不同度量方式) dist_matrix <- dist(expr_scaled, method = "euclidean") # 其他选项:"manhattan", "maximum" # 或基于相关性的距离 cor_matrix <- 1 - cor(t(expr_scaled)) # 样本间相关性距离 dist_matrix <- as.dist(cor_matrix) ``` --- ### 三、层次聚类执行 ```r # 使用hclust函数进行聚类 hc <- hclust(dist_matrix, method = "ward.D2") # 推荐使用ward.D2方法 ``` --- ### 四、结果可视化 ```r # 绘制树状 plot(hc, cex = 0.6, hang = -1, main = "层次聚类树状") # 结合展示(需安装gplots包) library(gplots) heatmap.2(as.matrix(expr_scaled), trace = "none", col = bluered(100), dendrogram = "row", # 显示行(样本)的聚类 margins = c(5,10)) ``` --- ### 五、结果解析 ```r # 切割树状获取聚类分组 cluster_groups <- cutree(hc, k = 3) # 指定分为3类 table(cluster_groups) # 查看各类样本数量 # 保存分组结果 write.csv(data.frame(Sample = names(cluster_groups), Cluster = cluster_groups), "cluster_results.csv") ``` --- ### 注意事项 1. **数据量控制**:层次聚类时间复杂度为$O(n^3)$,样本量>1000时建议改用其他方法[^2] 2. **参数选择**:通过`NbClust`包评估最佳聚类数: ```r library(NbClust) nb <- NbClust(expr_scaled, method = "ward.D2", index = "silhouette") ``` ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值