我的数据框:
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")
接下来发生的事情是,大多数酒吧都按照我想要的顺序排列,但有些酒吧并非如此。这是我有问题的情节的图像:
答案 0 :(得分:3)
你可以尝试
library(tidyverse)
data %>%
ggplot(aes(x = reorder(commodity, cost, sum), y = cost)) +
geom_col(fill = "steelblue3")
将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")