R 基于一个条形图对并排条形图进行排序,ggplot2

R 基于一个条形图对并排条形图进行排序,ggplot2,r,ggplot2,plot,graph,R,Ggplot2,Plot,Graph,我试图在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

我试图在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填充因子置于左侧。如果您对此有任何建议,我们也将不胜感激


我会这样做:

# 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
Flick先生的评论也显示了类似的方式。基本上,您的问题与R-FAQ中关于的问题相同,但有一个转折点,即顺序是由数据的子集而不是整个数据决定的。我们使用相同的解决方案,对其进行调整,以找到一种方法来忽略数据中与排序无关的部分。我是用一个显式的子集来完成的,Flick先生的评论是用ifelse将其他部分归零。两者都很好用

我还将geom_barstat=identity切换到了geom_col,这在最近的fewggplot`版本中是首选


这并不取决于不弄乱列的类。使用cbind时,隐式转换为矩阵,这在混合使用数值列和字符串/因子列时是不好的。把它作为一个数据框,一切都会好起来。

Quick sidenote:一种更好的数据处理方法如果你像Gregor指出的那样修复你的数据框,那么标准的重新排序应该很好:plot Thank Gregor。我试试你的建议,弗利克先生。谢谢。也可能值得指出的是,在这些情况下,geom_col的存在取代了geom_barstat=identity。这是完美的。谢谢