library(ggplot2)
mydat <- data.frame(mean = c(23, 24, 15, 27, 18, 19, 23, 20, 32),
lower = c(20, 19, 13, 15, 14, 18, 20, 17, 20),
upper = c(25, 29, 17, 39, 22, 20, 26, 23, 40),
class = c("A", "B", "C", "A", "B", "C", "A", "B", "C"),
domain = c("North", "North", "North", "West", "West", "West", "South", "South", "South"))
mydat$class <- as.factor(mydat$class)
mydat$domain <- as.factor(mydat$domain)
mydat %>% ggplot(aes(x = mean, y = class, color = domain, Group = domain, xmin = lower, xmax = upper)) +
geom_errorbar(width = 0.1, position = position_dodge(width = 0.5)) + theme_light() + geom_point(position = position_dodge(width = 0.5)) + xlab("Counts")
Gostaria de ordenar diminuindo o valor dos limites superiores (ou seja, upper
) da barra de erro dentro de cada um class
e também entre domain
s. A saída desejada é esta:
Tentei o seguinte código mas não surtiu o efeito desejado:
library(forcats)
mydat %>% ggplot(aes(x = mean, y = class, color = fct_infreq(domain), Group = fct_infreq(domain), xmin = lower, xmax = upper)) +
geom_errorbar(width = 0.1, position = position_dodge(width = 0.5)) + theme_light() + geom_point(position = position_dodge(width = 0.5)) + xlab("Counts")
Não creio que exista uma maneira “fácil” de alcançar esse resultado; quando você reordena seu eixo y de acordo com
max(upper)
a ordem 'definida' para todos os domínios (embora eu ficaria feliz em provar que estou errado nisso).Uma possível solução alternativa seria dividir seus gráficos por classe e reordenar cada um separadamente, por exemplo
Criado em 23/10/2023 com reprex v2.0.2
Se você fizer isso 'manualmente', poderá organizá-los na ordem desejada, por exemplo
Criado em 23/10/2023 com reprex v2.0.2
Não consigo descobrir o mesmo resultado que você esperava, mas espero que o código a seguir faça sentido para você de forma equivalente (onde
domain
as informações são adicionadas como rótulos a cada barra de erros)Dados