R语言循环遍历Protein分组单独绘制散点图报错排查
报错原因排查
- 函数名拼写错误:定义的绘图函数名为
pep_plot,但调用map循环时错写为peptide_plot,属于基础语法错误。 - 绘图逻辑错误:原函数始终传入全量数据集
pep_df做映射,没有按目标蛋白筛选对应子集;同时aes_string会把传入的蛋白名称(如"LAMB1")识别为数据框列名去匹配,找不到对应对象就触发object 'LAMB1' not found报错。之前能输出重复图的方案也正是因为没有做子集筛选,才会所有窗口都绘制全量肽段数据,仅标题变化。
可直接运行的实现方案
该方案会自动按蛋白分组筛选数据,为每个蛋白生成仅对应自身肽段的散点图,支持批量查看或本地导出。
# 加载依赖包 library(ggplot2) library(purrr) # 读入肽段数据 pep_df <- read.csv("Peptides.csv", sep = ",", header = TRUE) # 提取所有唯一蛋白ID protein_list <- unique(pep_df$Protein) # 单蛋白绘图函数 pep_plot <- function(target_protein) { # 筛选当前蛋白对应的所有肽段子集 sub_data <- pep_df[pep_df$Protein == target_protein, ] # 绘制散点图 plot_res <- ggplot(sub_data, aes(x = Peptides, y = Ratio)) + geom_point(shape = 21, fill = "#2c7fb8", color = "black", size = 2) + # 旋转x轴标签,避免长肽段名重叠 theme(axis.text.x = element_text(angle = 45, hjust = 1, vjust = 1)) + labs( title = paste0("Protein: ", target_protein), x = "Peptide", y = "Ratio" ) # 如需批量保存图片到本地,取消下一行注释即可,文件以蛋白名命名 # ggsave(paste0(target_protein, "_peptide_scatter.png"), plot = plot_res, width = 9, height = 5, dpi = 300) return(plot_res) } # 批量生成所有蛋白的散点图,结果存入列表 plot_list <- map(protein_list, ~pep_plot(.x))
使用说明
- 运行完成后,所有散点图按蛋白顺序存储在
plot_list列表中,输入plot_list[[1]]即可查看第一个蛋白的对应散点图,列表长度与总蛋白数一致。 - 若需导出图片,取消
ggsave行的注释后运行,会在当前R工作目录下生成每个蛋白独立的高清散点图文件。 - x轴标签默认旋转45度适配长肽段名称,可根据展示需求调整
angle参数修改倾斜角度。
内容的提问来源于stack exchange,提问作者arliss72
相关产品推荐
相关产品推荐

