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

标签 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(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 填充因子放在左侧。任何对此的建议也将不胜感激。

sample bar output

最佳答案

我会这样做:

# 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

enter image description here

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/

相关文章:

c# - 将 Visual C++ 与 R 结合使用

每周数据的 R 时间序列绘图

r - R + ggplot2-无法分配大小为128.0 Mb的向量

python - 如何仅用 3 个已知点制作连续的抛物线弧?

r - 以透明背景导出.png中的图

python - matplotlib:可以改变背景颜色吗?

r - R中组中出现的计数因素

维斯特 | read_xml 声明错误,而 read_html 则不声明错误

R-将文本中的分数转换为数值

r - 如何在ggplot2中将热图和散点图一个放在另一个之上