如何使用ggplot2的geom_col为每个分组绘制单个粗柱状图
解决ggplot2 geom_col多细柱问题:每个分组仅显示单个粗柱
问题原因
你当前的数据集里,Group 1和Group 2各自对应多条重复的mean_group数值记录,geom_col默认会为每一行数据绘制一个柱子,导致同一个分组下出现多个重叠的细柱。
解决方案
下面提供两种简单的修改方式:
方式一:先对数据去重
先提取每个Group对应的唯一mean_group值,再用处理后的数据绘制柱状图:
library(dplyr) library(ggplot2) # 保留每个Group的唯一mean_group记录 exp_unique <- exp %>% distinct(Group, mean_group) # 绘图 p <- ggplot(exp) + # 使用去重后的数据画柱状图 geom_col(data = exp_unique, aes(x = Group, y = mean_group)) + geom_dotplot(binaxis='y', stackdir='center', stackgroups = TRUE, binpositions="all", dotsize=0.8, colour="Black", fill="Black", aes(x=Group, y = mean_sample)) p
方式二:用stat_summary替代geom_col
无需预处理数据,直接用stat_summary计算每个分组的均值(因为同一分组的mean_group值完全相同,均值就是其本身),自动合并为单个柱子:
library(ggplot2) p <- ggplot(exp) + stat_summary(aes(x = Group, y = mean_group), fun = mean, geom = "col") + geom_dotplot(binaxis='y', stackdir='center', stackgroups = TRUE, binpositions="all", dotsize=0.8, colour="Black", fill="Black", aes(x=Group, y = mean_sample)) p
效果说明
两种方式都能让Group 1和Group 2各自显示一个粗柱状图,同时保留原来的点图部分。
内容的提问来源于stack exchange,提问作者MeganCole
相关产品推荐
相关产品推荐

