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

ggplot2使用geom_line绘制分类变量各取值年度占比的实现方法

你当前直接在geom_line的fun参数里传函数无法实现需求,核心原因是stat="summary"的计算分组是year(x轴变量)+你在aes中指定的group=state_crossing,每个计算组内只有同一个州同年的观测,拿不到当年所有观测的总数量,自然没法算占比。更稳妥易读的方案是先对原始数据做汇总计算后再绘图,示例代码如下:

library(dplyr)
library(ggplot2)

# 原始数据
plotting <- data.frame(
  year = rep(c("2001", "2002"), times=c(4,5)), 
  state_crossing = c("baja california", "baja california", "sonora", "tamaulipas", "sonora", "sonora", "tamaulipas", "tamaulipas", "baja california"), 
  value = rep(1, 9)
)

# 汇总计算每年每个州的观测占比
plotting_summary <- plotting %>%
  # 先按年份分组,统计每年总观测数
  group_by(year) %>%
  mutate(year_total = n()) %>%
  # 再按年份+州分组,计算对应占比
  group_by(year, state_crossing) %>%
  summarise(prop = n() / first(year_total), .groups = "drop")

# 绘图
ggplot(plotting_summary, aes(x = year, y = prop, color = state_crossing, group = state_crossing)) +
  geom_line()

如果需要让没有观测的州对应年份占比显示为0而非断线,可以额外用tidyr::complete补全年份和州的所有组合,将缺失的占比填充为0即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 08:12:04