R语言ggplot的dodge分组柱状图如何按指定组数值降序排序
R ggplot2分组柱状图自定义x轴排序解决方案
核心实现逻辑是:将x轴的国家编码变量country_iso2转为因子类型,手动指定因子水平为你需要的排列顺序即可。这里提供两种常用实现方式:
方式1:提前修改数据集因子水平(稳定性最高,不易出错)
library(dplyr) # 第一步:提取fraud_flag=1的样本,按value升序排序得到国家顺序(最终得到US、BR、MX的排列结果) # 如果需要fraud_flag=1的value降序排列,把arrange(value)改为arrange(desc(value))即可 country_order <- d %>% filter(fraud_flag == 1) %>% arrange(value) %>% pull(country_iso2) # 第二步:将country_iso2转为因子,指定水平为上面得到的顺序 d$country_iso2 <- factor(d$country_iso2, levels = country_order) # 第三步:用原代码直接画图即可 p1<-ggplot(data=d,aes(x=country_iso2,y=value,fill=factor(fraud_flag)))+ geom_bar(position='dodge',stat='identity')
小提示:把
fraud_flag转为因子传入fill参数,ggplot会自动使用离散色阶,也方便后续图例调整。
方式2:直接在ggplot代码内调整(不需要修改原数据集)
借助forcats包的fct_reorder函数可以直接在aes内调整x轴顺序:
library(forcats) p1<-ggplot(data=d, aes(x=fct_reorder(country_iso2, value, .fun = ~.x[which(d$fraud_flag[as.integer(.y)] == 1)], .desc = FALSE), y=value, fill=factor(fraud_flag)))+ geom_bar(position='dodge',stat='identity') + xlab("国家") # 可自定义x轴显示名称
内容的提问来源于stack exchange,提问作者Little L
相关产品推荐
相关产品推荐

