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

如何用R的ggplot2绘制按因子分组归一化的频率图/直方图

按子群体归一化的频率多边形绘制方法

要实现按每个TimePoint分组归一化频率,核心是在after_stat()里针对单个分组计算count总和,而非整个数据集的总和。直接修改y轴的映射逻辑即可:

library(ggplot2)

# 加载你的示例数据
DS <- structure(list(X = c(0, -0.01, 0.042944432215413, 0.0431301011419889, 0.042944432215413, 0.0424042102083902, 0.2100000012 , 0.13513333335333), TimePoint = c("early", "early", "late", "mid", "mid", "early", "late", "early")), row.names = c(NA,8L), class = "data.frame")

# 绘制按分组归一化的频率多边形
figure1 <- ggplot(data = DS, aes(x = X, colour = TimePoint)) +
  geom_freqpoly(aes(y = after_stat(count / ave(count, group, FUN = sum))), binwidth = 0.05) +
  labs(y = "归一化频率", x = "X值") +
  theme_minimal()

print(figure1)

关键说明:

  • ave(count, group, FUN = sum):这里的group是ggplot根据colour=TimePoint自动生成的分组标识,ave()会对每个分组内的count单独求和,确保每个数据点的count只除以自身分组的总count,实现分组内的归一化。
  • 手动设置binwidth:你的示例数据X范围很小,默认binwidth会导致图形过于稀疏,设置合适的数值能让可视化效果更直观。

验证的话可以看分组数据量:early组有4个数据点,mid有2个,late有2个,归一化后每个分组的频率总和都会是1。

内容的提问来源于stack exchange,提问作者Luuk van Vliet

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 00:42:59