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

求助:使用ggplot2绘制10年个体存在/缺失数据可视化代码

用ggplot2绘制个体存在/缺失时间序列图表

针对你这种10年间多个个体的存在/缺失数据,最直观的是用热图,能清晰展示每个个体每年的存在状态;如果想侧重看个体的时间趋势,也可以用点图。下面是具体代码:

1. 准备工作(加载包+模拟示例数据)

先加载tidyverse包(包含ggplot2和数据处理工具),如果没装过先运行install.packages("tidyverse")。

# 加载包
library(tidyverse)

# 模拟你的数据结构(Year:2013-2022, 100个个体, Presence为1/0表示存在/缺失)
set.seed(123) # 固定随机种子,结果可重复
df <- expand.grid(Year = 2013:2022,
                  Individual = paste0("Ind_", 1:100)) %>%
  mutate(Presence = sample(c(0,1), n(), replace = TRUE, prob = c(0.3, 0.7)))

2. 热图方案(推荐)

热图用颜色区分存在/缺失,x轴是年份,y轴是个体,非常适合批量展示:

ggplot(df, aes(x = Year, y = Individual, fill = factor(Presence))) +
  geom_tile(color = "white", size = 0.2) + # 每个单元格是一个 tile,白色边框区分
  scale_fill_manual(values = c("0" = "#cccccc", "1" = "#2ecc71"), # 缺失用浅灰,存在用绿色
                    labels = c("缺失", "存在")) +
  labs(x = "年份", y = "个体编号", fill = "状态") +
  theme_minimal() +
  theme(axis.text.y = element_blank(), # 100个个体y轴标签太挤,隐藏掉
        axis.ticks.y = element_blank(),
        panel.grid = element_blank()) # 去掉网格线,更清晰

如果想保留部分个体标签,可以把axis.text.y = element_blank()改成axis.text.y = element_text(size = 6),但100个还是会很挤,所以隐藏是更合理的选择。

3. 点图方案(侧重个体趋势)

如果想展示每个个体每年的状态,用点图,每个点代表存在:

ggplot(df %>% filter(Presence == 1), aes(x = Year, y = Individual)) +
  geom_point(size = 1.5, color = "#2ecc71") +
  labs(x = "年份", y = "个体编号") +
  theme_minimal() +
  theme(axis.text.y = element_text(size = 6)) # 小字号显示个体标签

注意事项

  • 把模拟的df换成你自己的真实数据就行,确保你的数据里Year是数值型,Individual是字符/因子型,Presence是0/1或者TRUE/FALSE(如果是TRUE/FALSE,代码里的factor(Presence)不用改,颜色映射会自动对应)
  • 如果你的Presence是其他值(比如"Present"/"Absent"),把scale_fill_manual里的"0"/"1"换成对应的字符串就行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 18:17:09