如何使用ggplot基于带count的聚合数据绘制直方图或密度图
基于聚合频数数据集绘制ggplot直方图/密度图的解决方案
完全可以直接基于带count统计值的聚合数据绘图,不需要先拆分为逐行个体的非聚合格式,你之前代码的问题是映射参数使用错误。
错误原因说明
geom_histogram识别的权重映射参数是weight,你在aes中写的count = count不属于该图层的标准映射字段,因此会被直接忽略。
正确代码示例
直方图绘制
library(tidyverse) # 直接用聚合数据绘制直方图 data %>% ggplot(aes(x = x, weight = count)) + geom_histogram(bins = 5, fill = "steelblue", color = "white")
上述代码的逻辑是为每个x值指定对应的频数作为权重,ggplot在统计 bins 内的总频数时会自动按权重累加,输出结果和先展开为个体数据再绘图的结果完全一致。
密度图绘制
密度图同样支持weight参数,可直接使用聚合数据绘制:
data %>% ggplot(aes(x = x, weight = count)) + geom_density(fill = "orange", alpha = 0.3)
可选操作:展开聚合数据为个体格式
如果你需要先得到逐行的个体数据集,可以使用uncount()函数直接展开,不需要手动构造:
# 按count列展开为逐行个体数据 individual_data <- data %>% uncount(count)
内容的提问来源于stack exchange,提问作者Maksym
相关产品推荐
相关产品推荐

