R:按两个因素之一的值重新排序geom_bar(stat =“identity”,position = position_dodge())

时间:2017-06-15 23:59:05

标签: r ggplot2 data.table

我有一个玩具数据表。

library(data.table)
library(ggplot2)

set.seed(45L)
DT <- data.table(V1=c(1L,2L),
               V2=LETTERS[1:3],
               Value=c(1,3,5,3,2,4,6,7,7,5,4,2),
               V4=c(1,1,2,2,3,3,4,4,5,5,6,6))

和ggplot代码

ggplot(DT, aes(x=factor(V4), y=V3, fill= factor(V1)))+
geom_bar(stat = "identity", position=position_dodge())+
theme(axis.text.x = element_text(angle = 45, hjust = 1),
      axis.line.x = element_line(),
      axis.line.y = element_line(),
      panel.background = element_blank())

这导致以下情节

Example Plot

我想用V1因子1的值重新排序x轴。因此,得到的顺序是5,4,2,6,3,1。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:3)

您的排序取决于其他两个变量,因此您可以使用forcats::fct_reorder2()

library(forcats)

ggplot(DT, aes(x=fct_reorder2(factor(V4), V1, Value, function(x, y) {sum(y[x == 1])}), 
               y=Value, fill= factor(V1)))+
    geom_bar(stat = "identity", position=position_dodge())+
    labs(x = "V4") +
    theme(axis.text.x = element_text(angle = 45, hjust = 1),
          axis.line.x = element_line(),
          axis.line.y = element_line(),
          panel.background = element_blank())

enter image description here

答案 1 :(得分:0)

我通常在调用ggplot之前在管道中执行此类数据准备。所以:

{{1}}