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.