有些酒吧不会在ggplot中重新排序

时间:2018-04-10 08:16:25

标签: r ggplot2

我的数据框:

data <- data.frame(commodity = c("A", "A", "B", "C", "C", "D"), 
          cost = c(1809065, 348456, 203686, 5966690, 172805, 3176424))
data
  commodity    cost
1         A 1809065
2         A  348456
3         B  203686
4         C 5966690
5         C  172805
6         D 3176424

接下来,我使用reorder绘制条形图:

library(tidyverse)
data %>%
  ggplot(aes(x = reorder(factor(commodity), cost), y = cost)) +
  geom_bar(stat = "identity", fill = "steelblue3")

接下来发生的事情是,大多数酒吧都按照我想要的顺序排列,但有些酒吧并非如此。这是我有问题的情节的图像:

enter image description here

2 个答案:

答案 0 :(得分:3)

你可以尝试

library(tidyverse)
data %>%
  ggplot(aes(x = reorder(commodity, cost, sum), y = cost)) +
  geom_col(fill = "steelblue3")

enter image description here

mean的默认reorder功能更改为sum。然后顺序符合ggplot的bar函数。值得注意的是,使用geom_col时,geom_bar优先使用stat="identity"。如果您需要减少排序,请尝试rev(reorder(commodity, cost, sum))或自己创建一个函数,例如function(x) -sum(x)

答案 1 :(得分:0)

默认情况下,重新排序会按每个组的平均值重新排序,如help page中所述。 Jimbou的解决方案更好,但你也可以通过在绘制和使用geom_col之前汇总数据以不同的方式做到这一点:

data %>%
  group_by(commodity) %>%
  summarise(cost = sum(cost)) %>%
  ggplot(aes(x = reorder(factor(commodity), cost), y = cost)) +
  geom_col(fill = "steelblue3")

enter image description here