ggplot2分组柱状图:分组统计结果与总计值双柱展示
绘制指定分组柱状图的解决方案
步骤1:数据准备与统计
首先需要对原始数据做统计处理,分别算出col3='yes'时col2各值的出现次数,以及col2各值的总出现次数,再把两个统计结果整合成适合绘图的长格式数据。
先加载所需工具包(首次使用请先安装):
# 安装依赖包(仅首次运行) install.packages(c("dplyr", "ggplot2")) # 加载包 library(dplyr) library(ggplot2)
原始数据:
df = data.frame(col1 = c('a', 'b', 'c','d','e'), col2 = c(3,1,2,3,1), col3 = c('yes','yes','no','no','yes'))
统计并整理数据:
# 统计col3为yes时col2各值的次数 yes_counts <- df %>% filter(col3 == "yes") %>% count(col2, name = "count") %>% mutate(group = "col3=yes时的次数") # 统计col2各值的总次数 total_counts <- df %>% count(col2, name = "count") %>% mutate(group = "总次数") # 合并两个数据集 plot_data <- bind_rows(yes_counts, total_counts)
步骤2:绘制分组柱状图
用ggplot2绘制分组柱状图,x轴对应col2的取值,每组包含两根柱子,分别对应"col3=yes时的次数"和"总次数":
ggplot(plot_data, aes(x = factor(col2), y = count, fill = group)) + geom_col(position = position_dodge(width = 0.8), width = 0.7) + labs( x = "col2的取值", y = "出现次数", title = "分组柱状图", fill = "统计类型" ) + theme_minimal() + scale_fill_brewer(palette = "Set2")
运行代码后会生成符合需求的图表:x轴展示col2的1、2、3三个取值,每个位置的两根柱子分别对应该值在col3为yes时的出现次数,以及该值的总出现次数。
内容的提问来源于stack exchange,提问作者keenan
相关产品推荐
相关产品推荐

