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

如何在R语言中基于宽格式年龄体重数据创建分种群连续X轴分层散点图?

解决方法:宽转长+ggplot叠层散点图

没问题!要实现这个需求,核心是先把你的宽格式数据转换成长格式(也就是tidy数据格式),然后用ggplot2就能轻松画出按种群区分的叠层散点图了。我给你一步步演示:

1. 加载必要的包

我们需要用到tidyverse包,它整合了数据处理(dplyr)和绘图(ggplot2)的工具:

library(tidyverse)

2. 导入/创建你的数据

先把你提供的示例数据转换成R的DataFrame:

df <- tibble(
  ID = 1:5,
  POPULATION = c("A", "A", "B", "B", "C"),
  `weight at age 1` = c(13.37, 5.19, 7.68, 6.96, 10.35),
  `weight at age 2` = c(14.15, 15.34, 6.92, 15.12, 8.86),
  `weight at age 3` = c(17.36, NA, 19.42, 36.39, 26.33)
)

3. 将宽格式数据转成长格式

这一步是关键!我们需要把每个年龄的体重列合并成两列:一列表示年龄,一列对应体重。用pivot_longer()函数就能完成:

df_long <- df %>%
  pivot_longer(
    cols = starts_with("weight at age"), # 选择所有体重相关的列
    names_to = "age", # 新列:年龄
    values_to = "weight", # 新列:体重
    names_prefix = "weight at age " # 去掉前缀,让年龄只保留数字
  ) %>%
  drop_na(weight) # 去掉体重为NA的行(可选,根据你的需求调整)

转换后的数据长这样(示例):

ID POPULATION age weight
1 A 1 13.37
1 A 2 14.15
1 A 3 17.36
2 A 1 5.19
2 A 2 15.34
...

4. 绘制叠层散点图

现在用ggplot2绘制图形,按POPULATION区分颜色,把所有种群的散点放在同一图中:

ggplot(df_long, aes(x = age, y = weight, color = POPULATION)) +
  geom_point(size = 3) + # 设置点的大小
  labs(
    x = "Age",
    y = "Weight",
    title = "Weight by Age and Population",
    color = "Population"
  ) +
  theme_minimal() # 可选:使用简洁的主题

关键说明

  • aes(color = POPULATION):让不同种群的点显示不同颜色,自动生成图例
  • 如果不想去掉NA值,可以把drop_na()去掉,换成在geom_point()里加na.rm = TRUE,这样NA值会被忽略但不会删除行
  • 你还可以根据需要调整点的形状、大小,或者添加趋势线(比如geom_smooth())来观察每个种群的体重变化趋势

内容的提问来源于stack exchange,提问作者Maya Eldar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 23:29:06