在R中创建不按字母顺序排列条形的分组条形图
R ggplot2分组条形图保留原始分类顺序解决方案
问题原因
ggplot2默认对字符型分类变量按字母顺序生成因子层级,所以你的Legend字段才会被重排为A、E、X的顺序。只要手动将Legend列的因子层级指定为数据中的原始出现顺序,就能保留你要的排列效果。
修改方法
方法1:基础R语法(无需额外安装包)
在创建数据集后、调用ggplot绘图前,添加一行代码修改因子层级即可:
library(ggplot2) # 原有数据集创建代码不变 Year <- c(rep("2012" , 3) , rep("2013" , 3) , rep("2014" , 3) , rep("2015" , 3) ) Legend <- rep(c("A" , "X" , "E") , 4) Count <- abs(rnorm(12 , 0 , 15)) data <- data.frame(Year,Legend,Count) # 新增此行:按原始出现顺序设置因子层级 data$Legend <- factor(data$Legend, levels = unique(data$Legend)) # 原有绘图代码不变 ggplot(data, aes(fill=Legend, y=Count, x=Year)) + geom_bar(position="dodge", stat="identity")
方法2:forcats包语法(tidyverse生态常用)
如果日常使用tidyverse系列工具,可以用fct_inorder函数快速按原始顺序设置因子层级:
# 未安装forcats先执行 install.packages("forcats") library(forcats) # 直接按数据出现顺序设置层级 data$Legend <- fct_inorder(data$Legend)
效果说明
修改后分组条形的排列顺序会同步为你需要的A、X、E原始顺序,同时图例的排列顺序也会自动匹配,无需额外调整图例参数。
内容的提问来源于stack exchange,提问作者drtamakloe
相关产品推荐
相关产品推荐

