Ik wil graag loodrechte lijnen aan de uiteinden van de snorharen plaatsen, zoals de functie boxplot
automatisch geeft.
Antwoord 1, autoriteit 100%
Zoals gesuggereerd maar niet geïmplementeerd door @Roland, kun je stat_boxplot
gebruiken om dit te implementeren. De truc om _boxplot
twee keer aan te roepen en is om de geom
in te stellen op errorbar
voor een van de aanroepen.
Merk op dat aangezien R
een 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.5
gebruiken 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_boxplot
te gebruiken om de snorhaaruiteinden te berekenen, maar ik ben niet genoeg van een ggplot2
wizard, 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