RStudio中plotMA绘制MA图报.local对象错误解决及热图绘制方法
问题背景
RStudio新手需要基于固定结构的数据集完成两类绘图:MA Plot、热图。
所用数据集的列结构统一为:
Gene Name:存储基因名称的文本列baseMean:基因平均表达量的数值列log2FC:两组比较经log2转换的倍数变化数值列Padj:差异显著性检验的校正P值数值列
调用plotMA函数时触发如下报错:
Error in .local(object, ...) : When called with a data.frame, plotMA expects the data frame to have 3 columns, two numeric ones for mean and log fold change, and a logical one for significance.
MA Plot 报错解决方法
报错核心原因:直接传入原始的4列数据框不符合plotMA的入参要求。当函数接收dataframe类型的输入时,强制要求数据框恰好为3列结构——前两列为数值型的表达均值、对数倍数变化,第三列为逻辑型的差异显著性标识,当前输入列数、列类型均不匹配。
解决步骤:
- 第一步:按函数要求预处理绘图用数据框
从原始数据中提取符合格式要求的三列,显著性判定阈值可按需调整,常用标准为校正P值<0.05为差异显著,预处理代码如下:# 请将"原始数据集"替换为实际使用的数据框名称 ma_plot_input <- data.frame( mean = as.numeric(原始数据集$baseMean), lfc = as.numeric(原始数据集$log2FC), sig = as.numeric(原始数据集$Padj) < 0.05 ) - 第二步:使用预处理后的数据框调用函数
将处理完成的3列数据框传入plotMA即可正常绘图。若需要为显著差异基因添加名称标签,可在绘图后补充基因名映射代码,无需额外调整函数入参结构。
适配当前数据集的热图绘制参考代码
新手可使用pheatmap包完成热图绘制,流程简单且可定制化程度高,参考代码如下:
- 若未安装该包,先运行安装命令:
install.packages("pheatmap") - 执行绘图代码:
library(pheatmap) # 过滤Padj缺失的无效行 heatmap_df <- 原始数据集[!is.na(as.numeric(原始数据集$Padj)), ] # 按Padj从小到大排序,取差异最显著的前50个基因作为热图展示对象 heatmap_df <- heatmap_df[order(as.numeric(heatmap_df$Padj)), ][1:50, ] # 构建热图绘图矩阵,以log2FC为展示数值,行名设置为基因名 plot_matrix <- matrix(as.numeric(heatmap_df$log2FC), ncol = 1) rownames(plot_matrix) <- heatmap_df$`Gene Name` colnames(plot_matrix) <- "log2FC" # 构建行注释,标注每个基因的显著性状态 row_anno <- data.frame( Significant = factor( as.numeric(heatmap_df$Padj) < 0.05, levels = c(TRUE, FALSE), labels = c("显著", "不显著") ) ) rownames(row_anno) <- heatmap_df$`Gene Name` # 绘制热图 pheatmap( plot_matrix, annotation_row = row_anno, show_rownames = TRUE, cluster_rows = TRUE, cluster_cols = FALSE, main = "Top 50 差异最显著基因热图" )
内容的提问来源于stack exchange,提问作者Sam Nolan
相关产品推荐
相关产品推荐

