求助:使用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
相关产品推荐
相关产品推荐

