label <- paste0("X", 1:6)
mean <- c(1.29,0.76,2.43,1.68,1.22,1.7)
lower <- c(0.84,0.50,1.58,1.1,0.8,1.11)
upper <- c(1.95,1.16,4.5,2.54,1.85,2.56)
df <- data.frame(label, mean, lower, upper)
# reverses the factor level ordering for labels after coord_flip()
# df$label <- factor(df$label, levels=rev(df$label))
library(ggplot2)
fp <- ggplot(data=df, aes(x=label, y=mean, ymin=lower, ymax=upper)) +
geom_errorbar() + geom_point() +
geom_hline(yintercept=1, lty=2) + # add a dotted line at x=1 after flip
coord_flip() + # flip coordinates (puts labels on y axis)
xlab("Label") + ylab("Mean (95% CI)") +
theme_bw() + ylim(c(0, 4))
fp
Usando o código acima, X3
é cortado porque seu limite superior é 4,5, que é maior que o ylim(c(0, 4))
definido. Existe uma maneira de evitar isso respeitando o limite do eixo que defini?
Ou seja, quero um enredo assim:
Para recortar parte de um geom sem removê-lo completamente, altere os limites das coordenadas em vez dos limites da escala do eixo . Nesse caso, isso significa que você poderia usar o
ylim
argumento decoord_flip
em vez da funçãoylim
:Aliás, você pode obter o mesmo gráfico sem usar
coord_flip
. Acho que inverter as coordenadas quando você não precisa apenas torna mais difícil depurar seu código de plotagem:Podemos usar
scale_y_continuous
eoob = scales::squish
. Comscales::squish
valores fora dos limites são definidos para o limite mais próximo em vez de removê-los.As barras de erro atingirão o limite (4) e não serão removidas.