ggplot boxplot - longitud de bigotes con eje logarítmico
Estoy tratando de crear un diagrama de caja horizontal con eje logarítmico usando ggplot2. Pero, la longitud de los bigotes está mal.
Un ejemplo reproducible mínimo:
Algunos datos
library(ggplot2)
library(reshape2)
set.seed(1234)
my.df <- data.frame(a = rnorm(1000,150,50), b = rnorm(1000,500,150))
my.df$a[which(my.df$a < 5)] <- 5
my.df$b[which(my.df$b < 5)] <- 5
Si trazo esto usando la base Rboxplot()
, todo esta bien
boxplot(my.df, log="x", horizontal=T)
Pero con ggplot,
my.df.long <- melt(my.df, value.name = "vals")
ggplot(my.df.long, aes(x=variable, y=vals)) +
geom_boxplot() +
scale_y_log10(breaks=c(5,10,20,50,100,200,500,1000), limits=c(5,1000)) +
theme_bw() + coord_flip()
Obtengo esta trama, en la que los bigotes tienen la longitud incorrecta (ver, por ejemplo, cómo hay muchos valores atípicos adicionales debajo de los bigotes y ninguno arriba).
Tenga en cuenta que, sin ejes de registro, ggplot tiene los bigotes de la longitud correcta
ggplot(my.df.long, aes(x=variable, y=vals)) +
geom_boxplot() +
theme_bw() + coord_flip()
¿Cómo produzco un diagrama de caja logarítmico horizontal usando ggplot con los bigotes de longitud correcta? Preferiblemente con los bigotes que se extienden hasta 1,5 veces el IQR.
Actualizar
Como se explicaaquí. Es posible usarcoord_trans(y = "log10")
en lugar descale_y_log10
, lo que hará que se calculen las estadísticasantes de transformando los datos.sin embargo, coord_trans
no se puede usar en combinación concoord_flip
. Por lo tanto, esto no resuelve el problema de crear diagramas de caja horizontales con un eje de registro.