Положите концы усов на поле

Я хотел бы поставить перпендикулярные линии на концах усов, какboxplot Функция автоматически дает.

 Jake Westfall21 окт. 2012 г., 03:30
Есть ли какая-то причина, почему это должно быть сделано в ggplot2, а не с помощьюboxplot который уже делает то, что вы хотите, или этот вопрос чисто академический интерес ...?
 user176229921 окт. 2012 г., 04:24
@Justin Спасибо, я проверил этот вопрос, но он слишком сложен для меня, и я продолжаю получать ошибки, я не знаю, какие биты заменить чем, извините: /
 Justin21 окт. 2012 г., 01:49
Вы можете сделать это, рассчитав квантиль, где ggplot рисует линии и рисуя свои собственныеgeom_segment или жеgeom_crossbar, видетьэтот вопрос
 user176229921 окт. 2012 г., 04:30
@Jake @ Джастин В качестве альтернативы, есть ли способ, которым я могу переместить положение меток осей в базовом блокпосте так, чтобы они были ближе к меткам галочки и были выделены жирным шрифтом? Я уверен, что я слишком привередливый, но я хотел бы, чтобы графики были последовательными.
 user176229921 окт. 2012 г., 04:28
@ Джейк Это чисто эстетично! У меня есть задание, требующее 2 графика, один блок-график, один график взаимодействия. Я создал график взаимодействия в ggplot2 и хотел бы, чтобы блокпост был согласованным (с метками осей, близкими к меткам меток) ....

Ответы на вопрос(3)

stat_boxplot реализовать это. Трюк зовет_boxplot дважды и должен установитьgeom вerrorbar для одного из звонков.

Обратите внимание, что какR При использовании подхода, выполненного ручкой и бумагой, целесообразно сначала реализовать панели ошибок, а затем нарисовать традиционную диаграмму сверху.

Использование фиктивных данных @ Rolanddf

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

 gaelgarcia18 февр. 2015 г., 04:10
Спасибо, что нашли время, чтобы объяснить это! :)
 mpalanco07 июл. 2015 г., 14:29
@ Produnis Чтобы изменить размер линий усов добавить аргументstat_params = list(width = 0.5) внутри функции:stat_boxplot, Смотрите результат в моем ответе.
 PatrickT05 дек. 2018 г., 11:13
@ Produnis и другие. В настоящее время:geom_boxplot(width = 0.2) + stat_boxplot(geom = "errorbar", width = 0.2)где значения, выбранные в блок-графике и на панелях ошибок, должны совпадать. Для усов, которые охватывают половину коробки, вы должны установитьwidth = 0.2 а такжеwidth = 0.1.
 Produnis03 июн. 2015 г., 23:13
как я могу изменить размер этих линий усов, если я используюgeom_boxplot(width=.2) ?

мы можем использовать аргумент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() 

 Will16 янв. 2016 г., 00:10
Отлично, это сработало! Спасибо!
 mpalanco15 янв. 2016 г., 23:24
@ Я изменю ответ. Новая версия ggplo2 2.0.0 не принимает этот аргументstat_params , Теперь это должно работать.
 Will16 янв. 2016 г., 00:12
Однако следует отметить, что это решение помещает панели ошибок поверх окна, что немного странно; Есть ли способ, чтобы вертикальная черта не работала над коробкой?
 Fábio14 янв. 2018 г., 03:04
Во избежание появления ошибок в верхней части окна я сделалstat_boxplot(geom = 'errorbar') + geom_boxplot(inherit.aes = TRUE)
 Will13 янв. 2016 г., 22:28
Это, кажется, не работает для меня; я получилError: Unknown parameters: stat_params, Какую версию R вы используете?

Это может быть возможно использовать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

Ваш ответ на вопрос