ggplot boxplot - comprimento de bigodes com eixo logarítmico
Estou tentando criar um boxplot horizontal com eixo logarítmico usando ggplot2. Mas, o comprimento dos bigodes está errado.
Um exemplo reprodutível mínimo:
Alguns dados
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
Se eu traçar isso usando a base Rboxplot()
, tudo está bem
boxplot(my.df, log="x", horizontal=T)
Mas com 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()
Recebo esse enredo, no qual os bigodes têm o tamanho errado (veja, por exemplo, como existem muitos outliers adicionais abaixo dos bigodes e nenhum acima).
Observe que, sem eixos de toras, o ggplot tem os bigodes com o comprimento correto
ggplot(my.df.long, aes(x=variable, y=vals)) +
geom_boxplot() +
theme_bw() + coord_flip()
Como produzo um boxplot logarítmico horizontal usando ggplot com os bigodes de comprimento correto? De preferência com os bigodes que se estendem a 1,5 vezes o IQR.
Atualizar
Como explicadoaqui. É possível usarcoord_trans(y = "log10")
ao invés descale_y_log10
, o que fará com que as estatísticas sejam calculadasantes transformando os dados.Contudo, coord_trans
não pode ser usado em combinação comcoord_flip
. Portanto, isso não resolve o problema da criação de gráficos de caixas horizontais com um eixo de log.