我正在努力处理我的ggplot2堆积条形图。我想手动定义条形的顺序。所以我通常通过将变量转换为因子并按照我想要的顺序定义级别来做到这一点。
data <- transform(data, variable = factor(variable, levels = c("A4 Da/De/Du", "A2 London", "A3 Berlin", "A1 Paris", "A5 Rome")))
当我检查我的变量水平时,我可以看到水平符合我想要的顺序
head(data$variable)
当我绘制我的数据时,一切看起来都符合要求,但不知何故,我不知道为什么,一个变量(例如“A4 Da / De / Du”)不在我定义的变量顺序中......
有人知道问题可能是什么吗? - 它是唯一带有特殊字符的变量(例如“/”) - 它是唯一一个零级别的变量(例如c(20,40,0,0,40)) - 我的ggplot代码非常复杂,我使用“reorder()”函数,我在ggplot2代码中使用“forcats”包。这可能是个问题吗?
非常感谢任何帮助或想法!
编辑(一些示例数据)
library(reshape2)
library(ggplot2)
library(dplyr)
df <- data.frame(cbind(a=c(20,40,20,10,10),b=c(10,30,50,5,5), c=c(60,10,10,15,5), d=c(80,20,0,0,0), e=c(50,10,10,15,15)))
colnames(df) <- c("D1 Paris", "D2 London", "D3 Berlin", "D4 Da/De/Du", "D5 Rome")
df$category <- c("C1", "C2", "C3", "C4", "C5")
data <- data %>% group_by(variable) %>% arrange(variable)
data <- melt(data)
data$percent <- data$value/100
data <- transform(data, variable = factor(variable,
levels = c("D4 Da/De/Du", "D2 London", "D3 Berlin", "D1 Paris", "D5 Rome")))
ggplot2代码的简短版本:
ggplot(data, aes(x=reorder((variable), percent), y=percent, fill=category)) +
coord_flip()+
geom_bar(stat="identity", width = .4, colour="black", lwd=0.1)
解
我终于解决了我的问题:) Gregor是对的,在按照所需顺序转换特定变量的级别后,ggplot2中的reorder()函数不再需要分别覆盖先前定义的级别,最后产生了我的错误......
谢谢Gregor!