相关疑难解决方法(0)

ggplot boxplot - 具有对数轴的晶须长度

我正在尝试使用 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")代替,这将导致在转换数据 …

r ggplot2 boxplot

5
推荐指数
1
解决办法
5659
查看次数

标签 统计

boxplot ×1

ggplot2 ×1

r ×1