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

如何基于长表格式数据用ggplot绘制B与A的关联散点图?

解决方案

要直接基于长表df2绘制目标散点图,无需转换为宽表,可通过按样本ID关联A、B的检测值来实现,具体步骤如下:

  1. 加载所需工具包
    除ggplot2外,需用dplyr处理长表数据:

    library(ggplot2)
    library(dplyr)
    
  2. 从长表中提取并关联A、B配对值
    通过筛选分析物子集,再按ID和Group关联,得到每个样本的A、B对应数据:

    # 提取分析物A的数值并命名
    df_A <- df2 %>% filter(Analyte == "A") %>% rename(A_value = Value) %>% select(ID, Group, A_value)
    # 提取分析物B的数值并命名
    df_B <- df2 %>% filter(Analyte == "B") %>% rename(B_value = Value) %>% select(ID, B_value)
    # 按ID关联两个子集,保留分组信息
    df_pair <- inner_join(df_A, df_B, by = "ID")
    
  3. 绘制分组散点图
    用配对数据绘图,逻辑与宽表版本一致:

    p <- ggplot(data = df_pair) +
      geom_point(aes(x = A_value, y = B_value, color = as.factor(Group))) +
      labs(x = "分析物A", y = "分析物B", color = "分组")
    p
    

更简洁的写法(无需显式创建中间表)

可通过dplyr的分组汇总直接提取每个ID的A、B值,一步生成配对数据:

df_pair <- df2 %>%
  group_by(ID, Group) %>%
  summarize(
    A_value = Value[Analyte == "A"],
    B_value = Value[Analyte == "B"],
    .groups = "drop"
  )

# 绘图
ggplot(df_pair, aes(x = A_value, y = B_value, color = as.factor(Group))) +
  geom_point() +
  labs(x = "分析物A", y = "分析物B", color = "分组")

这种方式始终基于原长表操作,仅针对每个ID提取配对的A、B值,未将整个数据集转换为宽表格式,完全符合需求。

内容的提问来源于stack exchange,提问作者Kevin Klipsch

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 21:15:03