Я хотел бы провести перпендикулярные линии на концах усов, как автоматически дает функция boxplot
.
Положите концы усов на коробку
Ответы (3)
Как указано, но не реализовано @Roland, вы можете использовать stat_boxplot
для реализации этого. Уловка, вызывающая _boxplot
дважды, заключается в том, чтобы установить geom
на errorbar
для одного из вызовов.
Обратите внимание, что, поскольку R
использует подход, основанный на ручке и бумаге, рекомендуется сначала реализовать планки погрешностей, а затем нарисовать традиционную коробчатую диаграмму поверх.
Использование фиктивных данных @ Roland df
ggplot(df, aes(x=cond, y = value)) +
stat_boxplot(geom ='errorbar') +
geom_boxplot() # shorthand for stat_boxplot(geom='boxplot')
Справка для stat_boxplot
(?stat_boxplot
) подробно описывает различные значения, вычисленные и сохраненные в data.frame
geom_boxplot(width=.2)
?
- person Produnis; 04.06.2015
stat_params = list(width = 0.5)
внутри функции: stat_boxplot
. Результат смотрите в моем ответе.
- person mpalanco; 07.07.2015
geom_boxplot(width = 0.2) + stat_boxplot(geom = "errorbar", width = 0.2)
, где значения, выбранные на прямоугольной диаграмме и в полосах погрешностей, должны совпадать. Для усов, которые занимают половину поля, вы должны установить width = 0.2
и width = 0.1
.
- person PatrickT; 05.12.2018
Чтобы изменить размер линий усов, мы можем использовать аргумент 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()
Error: Unknown parameters: stat_params
. Какую версию R вы используете?
- person Will; 14.01.2016
stat_params
. Теперь должно работать.
- person mpalanco; 16.01.2016
stat_boxplot(geom = 'errorbar') + geom_boxplot(inherit.aes = TRUE)
- person Fábio; 14.01.2018
inherit.aes
- ИСТИНА, поэтому geom_boxplot(inherit.aes = TRUE)
и geom_boxplot()
идентичны.
- person mpalanco; 14.01.2018
Можно было бы использовать 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
geom_segment
илиgeom_crossbar
. см. этот вопрос - person Justin   schedule 21.10.2012boxplot
, который уже делает то, что вы хотите, или этот вопрос представляет чисто академический интерес ...? - person Jake Westfall   schedule 21.10.2012