我正在尝试使用 ggplot2 创建带有对数轴的水平箱线图。但是,胡须的长度是错误的。
一个最小的可重现示例:
一些数据
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
Run Code Online (Sandbox Code Playgroud)
如果我使用基本 R 绘制此图boxplot(),一切都很好
boxplot(my.df, log="x", horizontal=T)
Run Code Online (Sandbox Code Playgroud)
但有了 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()
Run Code Online (Sandbox Code Playgroud)
我得到了这个图,其中晶须的长度错误(例如,请参见晶须下方有许多额外的异常值,而上方没有异常值)。
请注意,如果没有对数轴,ggplot 的胡须长度正确
ggplot(my.df.long, aes(x=variable, y=vals)) +
geom_boxplot() +
theme_bw() + coord_flip()
Run Code Online (Sandbox Code Playgroud)
如何使用 ggplot 和正确长度的胡须生成水平对数箱线图?优选地,晶须延伸至 IQR 的 1.5 倍。
注意,如此处所述。可以使用coord_trans(y = "log10")代替,这将导致在转换数据 …