如何基于多数值区间创建带多填充变量的Grouped Bar Plot?
实现多分组填充的分组条形图
你之前用ifelse做二元分类的思路没问题,但要实现三个及以上的分类,用dplyr里的case_when会更清晰,还能避免嵌套ifelse的混乱。另外注意你给出的区间里20-59和50-100有重叠,会导致部分数据被错误归类,先把区间调整为互斥的:<10, 10-19, 20-49, 50-100, >100,下面是具体步骤:
1. 创建多分类变量
用case_when按顺序匹配数值区间,生成新的分类列:
# 先加载需要的包 library(dplyr) library(ggplot2) # 处理数据,生成多分类列 new_data <- data %>% mutate( new_variable = case_when( variable < 10 ~ "<10", variable >= 10 & variable < 20 ~ "10-19", variable >= 20 & variable < 50 ~ "20-49", variable >= 50 & variable <= 100 ~ "50-100", variable > 100 ~ ">100", TRUE ~ NA_character_ # 处理不符合任何区间的数值(比如NA) ) )
case_when会按从上到下的顺序匹配条件,一旦匹配成功就停止,所以要注意区间的顺序逻辑。最后一行的TRUE ~ NA_character_是兜底处理,把所有不满足前面条件的数值标记为NA,方便后续排查异常。
2. 绘制分组条形图
要生成**分组(并排)**的条形图,关键是给geom_bar加上position = "dodge"参数,让同一x轴类别下的不同填充分组并排显示:
ggplot(new_data, aes(x = random_variable, fill = new_variable)) + geom_bar(position = "dodge") + # position="dodge"实现分组并排,默认stat="count"统计数量 labs( title = "多分组变量的分组条形图", x = "随机变量", y = "计数", fill = "变量分组" # 修改图例标题 )
如果你的数据需要按其他统计量(比如均值)绘制,就把geom_bar换成geom_col,并在aes里指定y对应的统计列即可。
内容的提问来源于stack exchange,提问作者Ily
相关产品推荐
相关产品推荐

