如何用ggplot2将会员与非会员平均骑行时长变量绘制成条形图?
用ggplot2绘制会员与非会员平均骑行时长条形图的正确方法
你已经通过R代码计算出会员(member)和非会员(casual)的平均骑行时长,得到meanride_member和meanride_casual两个单值变量,但当前绘制的条形图不符合预期(两个条形重叠),问题出在数据框构造——你没有明确区分用户类型,且用固定值作为x轴导致无法分类展示。
核心修正:构建分类数据框
ggplot2需要分类变量区分不同条形,需重新构造包含「用户类型」和「平均骑行时长」的标准数据框:
修正后的代码(替换原代码最后两行)
# 构建符合ggplot要求的数据框 mean_data <- data.frame( user_type = c("非会员", "会员"), mean_length = c(meanride_casual, meanride_member) ) # 绘制条形图 ggplot(data = mean_data, aes(x = user_type, y = mean_length)) + geom_bar(stat = "identity", fill = c("#2196F3", "#4CAF50"), width = 0.6) + labs( title = "会员与非会员平均骑行时长对比", x = "用户类型", y = "平均骑行时长(秒)" ) + theme_minimal() + geom_text(aes(label = round(mean_length, 1)), vjust = -0.5, size = 4) # 添加数值标签
代码说明
user_type列明确区分两类用户,作为x轴分类依据;mean_length对应各自的平均骑行时长,作为y轴数值;stat="identity"表示直接使用数据框中的数值绘制条形;- 新增标题、坐标轴标签和数值标签,让图表信息更清晰。
更简洁的写法:用dplyr一步完成计算+绘图
无需手动拆分数据计算均值,直接用dplyr分组汇总后绘图,减少冗余代码:
Data %>% group_by(type) %>% summarise(mean_length = mean(length, na.rm = TRUE)) %>% ggplot(aes(x = type, y = mean_length)) + geom_bar(stat = "identity", fill = c("#2196F3", "#4CAF50")) + labs(title = "会员与非会员平均骑行时长对比", x = "用户类型", y = "平均骑行时长(秒)") + theme_minimal() + geom_text(aes(label = round(mean_length, 1)), vjust = -0.3)
内容的提问来源于stack exchange,提问作者Digvijay Singh
相关产品推荐
相关产品推荐

