R语言绘制Tinder匹配二元结果双分类柱状图问题咨询
问题排查
- 语法错误:
geom_bar()行末尾缺少连接符+,后续的坐标轴、填充色配置会被识别为独立代码行,直接触发运行报错。 - 美学映射错误:
aes()中直接写y = sum(match)会对全数据集的match列统一求和,无法按照place和signal分组计算各组的匹配总次数。 - 参数配置错误:
beside = TRUE不属于ggplot2的geom_bar()参数,并列柱状图需要通过position = "dodge"实现。 - 填充色配置不匹配:
scale_fill_discrete()中设置的breaks、标签和你映射的signal字段(取值K/N/P)完全不对应,如果你需要把place的L/S改为Land/Stadt,应该修改x轴的离散刻度配置,而非fill的配置。
修正实现方案
推荐先分组汇总数据再绘图,逻辑更清晰不易出错:
library(ggplot2) library(dplyr) # 按地点、信号分组统计匹配总次数 tinder_agg <- tinder %>% group_by(place, signal) %>% summarise(match_count = sum(match), .groups = "drop") # 实现并列柱状图:x轴为地点,每个地点下分三个信号的柱子 ggplot(tinder_agg, aes(x = place, y = match_count, fill = signal)) + geom_col(position = "dodge", width = 0.7) + scale_x_discrete(name = "Ort", labels = c("L" = "Land", "S" = "Stadt")) + scale_fill_discrete(name = "信号类型") + ylab("Match总次数") + theme_minimal()
如果需要x轴直接展示「地点+信号」的组合维度,可修改x轴映射如下:
ggplot(tinder_agg, aes(x = paste0(place, "-", signal), y = match_count, fill = signal)) + geom_col(width = 0.7) + scale_x_discrete(name = "地点-信号组合") + scale_fill_discrete(name = "信号类型") + ylab("Match总次数") + theme_minimal()
内容的提问来源于stack exchange,提问作者Nat Ba
相关产品推荐
相关产品推荐

