如何用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
相关产品推荐
相关产品推荐

