You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 07:01:25