Zet snorhaaruiteinden op boxplot

Ik wil graag loodrechte lijnen aan de uiteinden van de snorharen plaatsen, zoals de functie boxplotautomatisch geeft.


Antwoord 1, autoriteit 100%

Zoals gesuggereerd maar niet geïmplementeerd door @Roland, kun je stat_boxplotgebruiken om dit te implementeren. De truc om _boxplottwee keer aan te roepen en is om de geomin te stellen op errorbarvoor een van de aanroepen.

Merk op dat aangezien Reen pen en papier benadering gebruikt, het raadzaam is om eerst de foutbalken te implementeren en vervolgens de traditionele boxplot over de bovenkant te tekenen.

De dummy-gegevens van @Roland gebruiken df

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

De hulp voor stat_boxplot(?stat_boxplot) detail de verschillende waarden berekend en opgeslagen in een data.frame


Antwoord 2, autoriteit 54%

Om de grootte van de lijnen van de snorharen te wijzigen, kunnen we het argument width = 0.5gebruiken in de functie: 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() 


Antwoord 3, autoriteit 12%

Het is misschien mogelijk om stat_boxplotte gebruiken om de snorhaaruiteinden te berekenen, maar ik ben niet genoeg van een ggplot2wizard, dus ik gebruik daarvoor de basisfunctie.

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

Other episodes