使用ggplot2绘制直方图添加分组计数与列总数值的报错处理问询
错误原因
- 变量名不一致:计算分箱宽度
bw时误用了不存在的数据集mydata,实际你的数据集命名为df,找不到对象会导致后续运算报错。 geom_text参数拼写错误:传入数据集的参数是data,不是mydata,参数不匹配会触发运算错误。- 分箱总计数的统计逻辑错误:原有代码中
group_by(gender) %>% mutate(n=sum(age))计算的是不同性别所有样本的年龄总和,和你需要的「每个年龄分箱的总样本数」完全不符,应该用stat_bin统计分箱总数后再添加顶部文本。
修正后可运行代码
首先加载依赖包:
library(ggplot2) library(dplyr)
数据集与参数计算部分:
df <- data.frame( age = c(58, 50, 71, 39, 70, 65, 43, 62, 79, 68, 67, 61, 44, 67), gender = c("Male", "Male", "Female", "Female", "Male", "Male", "Female", "Female", "Male", "Female", "Male", "Female", "Female", "Male") ) # 修正mydata为df bw <- round(2*IQR(df$age, na.rm = T)/length(df$age)^(1/3), 0) mybreaks <- seq(min(df$age) - bw, max(df$age) + bw, bw)
绘图代码:
ggplot(df, aes(age, fill = gender)) + geom_histogram(binwidth = bw, color = "black") + scale_x_continuous(breaks = mybreaks) + # 分箱内分组计数文本,兼容新版ggplot2语法 stat_bin( binwidth = bw, geom = "text", color = "white", aes(label = after_stat(count)), position = position_stack(vjust = 0.5) ) + # 分箱顶部总计数文本 stat_bin( binwidth = bw, geom = "text", aes(label = after_stat(count)), vjust = -0.5 )
内容的提问来源于stack exchange,提问作者TeoK
相关产品推荐
相关产品推荐

