我正在尝试在 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
MrFlick 的评论显示了类似的方式。基本上你的问题与关于 ordering bars in ggplot2 的 R-FAQ 相同。 ,但有一点不同,顺序是由数据的子集而不是整个数据决定的。我们使用相同的解决方案,对其进行调整以找到一种方法来忽略与排序无关的数据部分。我使用显式子集来完成此操作,MrFlick 的注释通过使用 ifelse
将其他部分清零来实现。两者都工作得很好。
我还将您的 geom_bar(stat = "identity") 切换为
geom_col(),这是最近几个
ggplot` 版本中的首选。
这确实取决于不搞乱列的类。当您使用 cbind 时,您会隐式转换为矩阵,当您混合数字和字符串/因子列时,这会很糟糕。将其保留为数据框,一切都应该没问题。
关于r - 基于一个条形图对并排条形图进行排序,ggplot2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53419865/