ggplot2按Area_atacada降序排序后绘制柱状图顺序不匹配问题求助
问题原因
ggplot2绘制分类轴时,默认将字符型分类变量按字典序排列,该排序规则和数据框本身的行顺序无关,因此提前对数据框排序不会影响最终的坐标轴展示顺序。
修复方案
你只需要将ID列转换为因子类型,显式指定因子的层级和你需要的排序规则即可,有两种常用实现方式:
方案1:数据预处理时指定因子层级
修改你筛选Top5数据的代码,新增转换因子的逻辑:
pred_attack_all_F <- ds %>% arrange(desc(Area_atacada)) %>% head(5) %>% # 显式指定ID的因子层级,rev适配coord_flip后最大值排在最上方的需求 mutate(ID = factor(ID, levels = rev(ID)))
修改完成后你原有的绘图代码无需调整,运行即可得到符合排序要求的柱状图。
方案2:绘图时直接调整分类顺序
无需修改数据预处理代码,直接在绘图的美学映射中使用forcats::fct_reorder按数值排序:
ggplot() + geom_bar(data=pred_attack_all_F, aes(x = forcats::fct_reorder(ID, Area_atacada, .desc = TRUE), y = Area_atacada), stat="identity", fill="#f68060", alpha=.6, width=.4) + coord_flip() + xlab("") + theme_bw()+ theme(plot.title = element_text(size = 18, face = "bold"))
内容的提问来源于stack exchange,提问作者Leprechault
相关产品推荐
相关产品推荐

