如何用pivot_longer和facet_wrap实现指定多面板鸟类计数可视化?
解决步骤
1. 修正长格式数据转换
你原来的pivot_longer代码存在语法错误,!data不是正确的列选择方式。需要明确指定保留ID和Month列,将鸟类相关列(Geese、Ducks、Crows)转换为长格式,同时从ID中拆分出观测者姓名(Name)和年份(Year)——这是实现6个面板的关键:
library(tidyverse) # 宽转长+拆分ID信息 data_long <- data %>% # 将鸟类列转为长格式,保留ID和Month pivot_longer(cols = !c(ID, Month), names_to = "Bird", values_to = "count") %>% # 从ID拆分出Name和Year(ID格式为Name_Month_Year) separate(ID, into = c("Name", "tmp_month", "Year"), sep = "_") %>% # 删除重复的月份列 select(-tmp_month)
2. 绘制6个面板的分面图
要得到6个面板(3种鸟类 × 2个年份),只需用facet_wrap同时按Bird和Year分面,还可以给不同观测者的点上色区分:
ggplot(data_long, aes(x = Month, y = count, color = Name)) + geom_point(size = 2) + # 按鸟类和年份分面,生成6个面板 facet_wrap(vars(Bird, Year)) + # 可选:优化主题样式 theme_bw()
效果说明
- 每个面板对应一种鸟类+一个年份,共6个面板
- 每个面板内包含Bob、Ken、Rick各2个数据点(对应Jan和Feb)
- 不同颜色的点区分不同观测者,X轴为离散的Jan/Feb,Y轴为鸟类数量
内容的提问来源于stack exchange,提问作者B.Nin
相关产品推荐
相关产品推荐

