使用ggplot绘制购买红混酿的酒吧及餐厅占比柱状图问题咨询
调整思路
你原来的代码存在两个核心问题:
- 字段映射不符合需求:x轴用了地区
region、y轴用了总消费totdol,和你要统计的「餐厅/酒吧的红混酿购买数据」不匹配 - 统计逻辑不符合需求:
fun = "mean"是计算均值,你需要的求和逻辑要把参数改成fun = "sum"
实现代码
1. 直接统计红混酿购买总和
把x轴替换为你数据中标识场所类型的字段(示例假设字段名为venue_type,取值为餐厅/酒吧,你可以替换为自己的实际字段名),y轴替换为red_blend即可:
ggplot(PCsUnlimited) + stat_summary(aes(x = venue_type, y = red_blend), fun = "sum", geom = "bar") + ylab("红混酿购买总金额/总量") + xlab("场所类型")
2. 计算占比并绘制百分比柱状图
如果需要展示占比,推荐先做数据汇总再绘图,逻辑更清晰:
library(dplyr) # 先汇总各场所的红混酿购买数据,计算占比 PCsUnlimited_summary <- PCsUnlimited %>% group_by(venue_type) %>% summarise(total_red_blend = sum(red_blend, na.rm = TRUE)) %>% mutate(purchase_prop = total_red_blend / sum(total_red_blend)) # 绘制占比柱状图 ggplot(PCsUnlimited_summary, aes(x = venue_type, y = purchase_prop)) + geom_col(fill = "#2c7fb8") + scale_y_continuous(labels = scales::percent) + # 将y轴转换为百分比格式 ylab("红混酿购买占比") + xlab("场所类型")
注意事项
- 如果
red_blend是0/1标识是否购买的字段,sum统计的就是对应场所的购买用户/订单总量;如果是金额字段,sum统计的就是总购买金额,占比计算逻辑通用 - 代码中
na.rm = TRUE参数是为了避免空值导致计算错误,若你的数据无空值可删除
内容的提问来源于stack exchange,提问作者helpneededthankyou
相关产品推荐
相关产品推荐

