ggplot Boxplot - Länge der Whisker mit logarithmischer Achse

Ich versuche mit ggplot2 ein horizontales Boxplot mit logarithmischer Achse zu erstellen. Aber die Länge der Schnurrhaare ist falsch.

Ein minimal reproduzierbares Beispiel:

Date

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

Wenn ich dies mit der Basis R plotteboxplot(), alles ist gu

boxplot(my.df, log="x", horizontal=T)

Aber mit 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()

Ich erhalte dieses Diagramm, in dem die Whisker die falsche Länge haben (siehe zum Beispiel, wie viele zusätzliche Ausreißer unter den Whiskern und keine darüber).

Beachten Sie, dass ggplot ohne logarithmische Achsen die richtige Länge für die Whisker hat

ggplot(my.df.long, aes(x=variable, y=vals)) +
  geom_boxplot() +
  theme_bw() + coord_flip()

Wie erstelle ich ein horizontales logarithmisches Boxplot mit ggplot und den richtigen Whiskern? Vorzugsweise mit den Whiskern, die sich bis zum 1,5-fachen des IQR erstrecke

Aktualisiere

Wie erklärtHie. Es ist möglich, @ zu verwendcoord_trans(y = "log10") Anstatt vonscale_y_log10, wodurch die Statistiken berechnet werdenVo die Daten transformieren.Jedoc, coord_trans kann nicht in Kombination mit @ verwendet werdcoord_flip. Damit ist das Problem der Erstellung horizontaler Boxplots mit einer Protokollachse nicht gelöst.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage