Chciałbym umieścić prostopadłe linie na końcach wąsów, tak jak automatycznie daje funkcja boxplot
.Umieść końcówki boków na pudełku
Odpowiedz
Może być możliwe użycie stat_boxplot
do obliczenia końcówek wąsów, ale nie mam dość kreatora ggplot2
, więc używam do tego funkcji bazowej.
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
Jak zasugerował, ale nie realizowane przez @Roland, można użyć stat_boxplot
zaimplementować to. Podstęp dwukrotnie wywołuje _boxplot
i służy do ustawienia jednego z wywołań na geom
do .
Należy pamiętać, że jako R
używa się pióra i papieru, zaleca się najpierw zastosować paski błędów, aby narysować tradycyjny boxplot na górze.
Korzystanie @ danych fikcyjnych Roland df
ggplot(df, aes(x=cond, y = value)) +
stat_boxplot(geom ='errorbar') +
geom_boxplot() # shorthand for stat_boxplot(geom='boxplot')
Pomoc dla stat_boxplot
(?stat_boxplot
) szczegółowo różne wartości obliczone i zapisane w data.frame
Dzięki za poświęcenie czasu na wyjaśnienie tego! :) – gaelgarcia
Jak mogę zmienić rozmiar tych linii-wąsów, jeśli używam 'geom_boxplot (width = .2)'? – Produnis
@ Produnis Aby zmienić rozmiar linii wąsów, dodaj argument 'stat_params = list (width = 0.5)' wewnątrz funkcji: 'stat_boxplot'. Zobacz wynik w mojej odpowiedzi. – mpalanco
Aby zmienić rozmiar wąsy linie my CAN użyj argumentu width = 0.5
w funkcji: 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()
To nie wydaje się działać dla mnie; Otrzymuję komunikat "Błąd: nieznane parametry: stat_params". Jakiej wersji R używasz? – Will
@Zamodyfikowałem odpowiedź. Nowa wersja ggplo2 2.0.0 nie akceptuje tego argumentu 'stat_params'. Teraz powinno działać. – mpalanco
Świetnie, zadziałało! Dzięki! – Will
można to zrobić poprzez obliczenie kwantyl gdzie ggplot rysuje linie i rysunek własną 'geom_segment' lub' geom_crossbar'. zobacz [to pytanie] (http://stats.stackexchange.com/questions/8137/how-to-add-horizontal-lines-to-ggplot2-boxplot) – Justin
Czy jest jakiś powód, dla którego należy to zrobić w ggplot2, i nie używasz "boxplot", który już robi to, co chcesz, czy jest to kwestia czysto akademickiego zainteresowania ...? –
@Justin Dzięki, mam wyrejestrowany na to pytanie, ale jest to zbyt zaawansowane dla mnie i zachować uzyskiwanie błędy, nie wiem, które bity zastąpić co, przepraszam:/ – user1762299