将胡须末端放在箱形图上

use*_*299 42 r ggplot2 boxplot

我想在boxplot功能自动给出的胡须末端放置垂直线.

mne*_*nel 54

正如@Roland暗示但未实现的那样,您可以使用它stat_boxplot来实现它.诀窍呼叫_boxplot两次,是设置geomerrorbar了一个通话.

请注意,R使用笔和纸方法时,建议首先在顶部绘制传统的箱形图来实现误差线.

使用@ Roland的虚拟数据 df

ggplot(df, aes(x=cond, y = value))  + 
 stat_boxplot(geom ='errorbar') + 
 geom_boxplot() # shorthand for  stat_boxplot(geom='boxplot')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

stat_boxplot(?stat_boxplot)的帮助详细说明了计算和保存的各种值data.frame

  • @ Produnis要调整胡须线的大小,请在函数内添加参数`stat_params = list(width = 0.5)`:`stat_boxplot`.在我的回答中查看结果. (4认同)
  • @Produnis 等人。当前:``geom_boxplot(width = 0.2) + stat_boxplot(geom = "errorbar", width = 0.2)``,其中箱线图中和误差条中选择的值必须匹配。对于跨越半个盒子的胡须,您可以设置“width = 0.2”和“width = 0.1”。 (2认同)

mpa*_*nco 24

要调整胡须线的大小,我们可以使用函数width = 0.5内部的参数:stat_boxplot

set.seed(42)
df <- data.frame(cond = factor(rep(c("A", "B"), each = 500)), 
                 value = c(rnorm(500, mean = 1, sd = 0.2), 
                           rnorm(500, mean = 1.5, sd = 0.1))) 

library(ggplot2)
ggplot(df, aes(x = cond, y = value)) +
       stat_boxplot(geom = "errorbar", width = 0.5) +  
       geom_boxplot() 
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


Rol*_*and 7

有可能stat_boxplot用来计算晶须结束,但我还不够ggplot2精灵,所以我使用了基本函数.

set.seed(42)
df <- data.frame(cond = factor( rep(c("A","B"), each=500) ), 
                 value = c(rnorm(500,mean=1,sd=0.2),rnorm(500, mean=1.5,sd=0.1)))


whisk <- function(df,cond_col=1,val_col=2) {
  require(reshape2)
  condname <- names(df)[cond_col]
  names(df)[cond_col] <- "cond" 
  names(df)[val_col] <- "value"
  b <- boxplot(value~cond,data=df,plot=FALSE)
  df2 <- cbind(as.data.frame(b$stats),c("min","lq","m","uq","max"))
  names(df2) <- c(levels(df$cond),"pos")
  df2 <- melt(df2,id="pos",variable.name="cond")
  df2 <- dcast(df2,cond~pos)  
  names(df2)[1] <- condname
  df2
}



library(ggplot2)

plot1 <- ggplot(df, aes(x=cond)) 
plot1 <- plot1 + geom_errorbar(aes(ymin=min,ymax=max),data=whisk(df),width = 0.5)
plot1 <- plot1 + geom_boxplot(aes(y=value))
plot1
Run Code Online (Sandbox Code Playgroud)

在豆须末端水平的boxplot