如何在ggplot中实现按日统计酒店总入住人数的柱状图?
解决ggplot统计每日总入住人数的问题
你当前的geom_bar()默认会对total_guests的不同取值做计数统计,这和你要的“每日总入住人数”(按日期汇总total_guests的求和值)不符。可以通过两种方式实现需求:
方法1:先预处理数据再绘图
先用dplyr聚合每日总人数,再用geom_col()绘制柱状图(geom_col()直接使用y轴的数值,无需额外统计):
library(dplyr) library(ggplot2) # 计算每日总入住人数 daily_guest_total <- August_2015_mydg %>% group_by(arrival_date_day_of_month) %>% summarize(daily_total = sum(total_guests, na.rm = TRUE)) # 绘制柱状图 ggplot(daily_guest_total) + geom_col(aes(x = arrival_date_day_of_month, y = daily_total)) + labs(x = "入住日期(日)", y = "当日总入住人数")
方法2:直接在ggplot中使用统计函数
无需预处理数据,用stat_summary()指定求和函数,并使用柱状图作为几何对象:
library(ggplot2) ggplot(August_2015_mydg) + stat_summary( aes(x = arrival_date_day_of_month, y = total_guests), fun = sum, # 指定求和函数 geom = "col" # 使用柱状图展示结果 ) + labs(x = "入住日期(日)", y = "当日总入住人数")
注:你原代码中的facet_wrap(~arrival_date_day_of_month)会把每个日期拆分成独立子图,这和“查看每日总入住人数”的需求不匹配,所以上述代码中移除了分面设置。如果需要其他展示形式,可以根据需求调整。
内容的提问来源于stack exchange,提问作者user19587849
相关产品推荐
相关产品推荐

