我试图在ggplot2中创建一个并排的条形图,并按并排图的左条进行数字排序。我已经尝试过重新排序功能,但这似乎是按两个小节的平均值而不只是其中之一进行排序。
并排条形图示例
library(ggplot2)
a<-(c(1:10))
e<-c("group a","group b", "group c", "group d", "group e", "group a","group b", "group c", "group d", "group e")
fillvariable<-c(1,2,2,1,2,2,1,1,2,1)
data<-cbind(a,e,fillvariable)
data<-as.data.frame(data)
data
plot <- ggplot(data, aes(x=e, y=a,fill=factor(fillvariable))) + geom_bar(stat = "identity", position = 'dodge')
plot
我想按左(红色)条的数字对条进行排序(请参见示例条形图)。我的真实x轴有很多组,因此键入每个标签并以这种方式设置顺序将不是一个好主意。有没有人建议如何使用R中的函数执行此操作?
我意识到我也遇到了另一个问题。我确定如何确保条形图每次都将1填充因子放在左侧。对此的任何建议也将不胜感激。
答案 0 :(得分:4)
我会这样:
# isolate the subset of data you want to order by
subset_to_order = subset(data, fillvariable == 1)
# use reorder to reorder the factor
subset_to_order$e = with(subset_to_order, reorder(e, a))
# apply the same order to the whole data
data$e = factor(data$e, levels = levels(subset_to_order$e))
plot <- ggplot(data, aes(x=e, y=a,fill=factor(fillvariable))) + geom_col(position = 'dodge')
plot
MrFlick的评论显示了类似的方式。基本上,您的问题与关于ordering bars in ggplot2的R-FAQ相同,但有一点曲解,即顺序由数据的子集而不是整个数据确定。我们使用相同的解决方案,对其进行调整以找到一种忽略顺序无关紧要的数据部分的方法。我使用显式子集来完成此操作,MrFlick的注释通过使用ifelse
将其他部分清零来完成。两者都很好。
我还切换了您的geom_bar(stat = "identity") to
geom_col(), which is preferred in the last few
ggplot`版本。
这确实取决于不弄乱列的类。当您使用cbind
时,您隐式转换为矩阵,这在混合数字列和字符串/因数列时是不好的。将其保留为数据框,一切都应该很好。