R语言绘制多组折线图求助:基于data.frame统计年份观测数
解决ggplot绘制多分组折线图(按年份计数)的问题
你的代码核心问题有两个:
geom_line里的group = 1会把所有不同origin的数据强制归为一组,导致折线混乱交叉- 使用
stat = "count"时,没有配合正确的分组映射,无法按origin和year分别统计观测数
下面提供两种可行的解决方案:
方案1:直接在ggplot中用stat_count处理
不需要提前汇总数据,通过指定正确的分组映射,让ggplot自动按origin和year统计计数:
library(ggplot2) library(dplyr) metadata %>% filter(!is.na(origin)) %>% ggplot(aes(x = year, colour = origin, group = origin)) + geom_point(stat = "count", size = 5, alpha = 0.3) + geom_line(stat = "count") + theme_minimal()
这里把group设为origin,确保每个origin单独生成一条折线,stat = "count"会自动计算每个year+origin组合的观测数量作为Y轴值。
方案2:先汇总数据再绘图(更直观易调试)
提前用dplyr统计好每个origin每年的观测数,再绘图逻辑更清晰:
library(ggplot2) library(dplyr) # 预处理:统计每个origin对应年份的观测数 summary_data <- metadata %>% filter(!is.na(origin)) %>% count(year, origin, name = "obs_count") # 绘制折线图 ggplot(summary_data, aes(x = year, y = obs_count, colour = origin, group = origin)) + geom_point(size = 5, alpha = 0.3) + geom_line() + theme_minimal()
count()函数会生成包含year、origin和对应观测数obs_count的汇总表,之后直接映射Y轴为obs_count即可,避免了stat参数带来的混淆。
内容的提问来源于stack exchange,提问作者Anas Elomari
相关产品推荐
相关产品推荐

