Reordenar eixo x do gráfico de barras ggplot por facet_wrap
Digamos que eu tenho um exemplo de quadro de dados:
frame <-
data.frame(group = c(rep(1, 3), rep(2, 3)),
idea = c(1, 2, 3, 1, 2, 4),
value = c(10000, 5000, 50, 5000, 7500, 100),
level = sample(c("rough", "detailed"), 6, TRUE))
Eu gostaria de um gráfico de barras de valores com cada idéia em um grupo ordenado por seu valor. Posso me aproximar assim
library(dplyr)
library(ggplot2)
top_ideas <-
frame %>%
group_by(group) %>%
arrange(group, desc(value))
frame %>%
group_by(group) %>%
mutate(idea = idea %>% factor(levels = top_ideas$idea)) %>%
ggplot(aes_string(x = "idea", y = "value", fill = "level")) +
geom_bar(stat = "identity") +
theme(legend.position = "bottom",
axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
facet_wrap(~group, scales = "free")
A mutação na finaldplyr
A linha está definindo os níveis dos fatores de acordo com sua ordem notop_ideas
dataframe acima disso. Infelizmente, como as idéias nos 1 e 2 são compartilhadas pelos grupos 1 e 2, a ordem é definida pelo primeiro grupo.
O que eu gostaria de ter é a ordenação de idéias nas duas facetas, independente de cada grupo. Como posso fazer isso em umdplyr
corda? Estou perdendo algo simples?
Devo notar que este é um exemplo de dados. Os dados reais são muito maiores e englobam mais grupos e mais idéias que são compartilhadas.