coord_flip类型图表数据不显示,双变量绘图报错求助
问题分析与修复方案
原代码的核心问题
- 分组逻辑错误:仅按
MH_SUI_EVR分组计算的MH_SUI_EVR_Count是全局总数,并非每个FREQ_CANN_USE(你需求中的FREQ_DAY_ALL)分类下的样本量,导致y轴映射数据与x轴分类不匹配。 - 图层数据冲突:ggplot主数据是经过分组
mutate后的数据集,但两个geom_bar又调用了原始数据集,造成美学映射(如x、y)的长度不一致,触发check_aesthetics()错误。 - 变量名大小写问题:报错找不到
MH_SUI_EVR_COUNT,是因为代码里定义的变量是MH_SUI_EVR_Count(驼峰式),大小写不匹配导致识别失败。
修正后的代码
先正确统计每个分类变量与自杀倾向组合下的样本量,再绘制分组柱状图:
# 按分类变量+自杀倾向分组,统计每组样本量 count_data <- PAST_YR_SUI_CANN %>% group_by(FREQ_DAY_ALL, MH_SUI_EVR) %>% summarise(sample_n = n(), .groups = "drop") # 绘制分组柱状图 Test <- count_data %>% ggplot(aes(x = factor(FREQ_DAY_ALL), y = sample_n, fill = factor(MH_SUI_EVR))) + geom_bar(stat = "identity", position = "dodge") + # 并列显示分组柱形,堆叠用"stack" labs( x = "使用频率分类", y = "样本量", fill = "曾报告自杀倾向", title = "不同使用频率下的自杀倾向样本量分布" ) + scale_fill_discrete(labels = c("否", "是")) + # 给0/1添加易懂标签 coord_flip() + theme_minimal() Test
关键说明
- 若你的目标分类变量是
FREQ_CANN_USE,直接替换代码中的FREQ_DAY_ALL即可。 - 用
position = "dodge"实现并列柱形,方便对比同一分类下的两组样本量;若需要堆叠效果,改为position = "stack"。 - 所有图层统一使用预处理后的统计数据集,彻底解决数据长度不匹配的问题。
内容的提问来源于stack exchange,提问作者Freya_Luna
相关产品推荐
相关产品推荐

