Не удается настроить ширину boxplot

#r #ggplot2 #boxplot

#r #ggplot2 #boxplot

Вопрос:

Я не могу изменить ширину boxplot ggplot2.

Я знаю, что это, наверное, тысячный раз, когда кто-то задает подобный вопрос, но, потратив последние 2 часа на попытки найти решение (что я редко делаю), у меня все.

Кроме того, я думаю, что кто-то, знающий о ggplot2, может ответить через 30 секунд.

Пример кода аналогичной проблемы

 # Code from official ggplot2 help page
# https://ggplot2.tidyverse.org/reference/geom_boxplot.html
y <- rnorm(100)
df <- data.frame(
  x = 1,
  y0 = min(y),
  y25 = quantile(y, 0.25),
  y50 = median(y),
  y75 = quantile(y, 0.75),
  y100 = max(y)
)
ggplot(df, aes(x))  
  geom_boxplot(
   aes(ymin = y0, lower = y25, middle = y50, upper = y75, ymax = y100),
   stat = "identity"
 )
  

Я попытался изменить ширину, чтобы это была не вся графика с boxplot, но безрезультатно. я попытался ввести width = 0.5 / width = 0.1 в ggplot, geom_boxplot и в aes, и это ничего не меняет.

Кто-нибудь может помочь? Спасибо

РЕДАКТИРОВАТЬ: Спасибо за помощь, ребята. Для дальнейшего использования код, который я использовал, был:

 y <- rnorm(100)
df <- data.frame(
  x = 1,
  y0 = min(y),
  y25 = quantile(y, 0.25),
  y50 = median(y),
  y75 = quantile(y, 0.75),
  y100 = max(y)
)
ggplot(df, aes(as.factor(x)))  
  geom_boxplot(
   aes(ymin = y0, lower = y25, middle = y50, upper = y75, ymax = y100),
   width = 0.1,
   stat = "identity"
 )
  

Комментарии:

1. Легче понять, что происходит, если то, с чем вы боролись (изменение ширины), включено в ваш пример кода

2. Используйте ggplot(df, aes(as.factor(x))) ... , а затем width = .1 (или что-то еще) в geom_boxplot()

3. Используйте коэффициент для x вместо числа или увеличьте свою ось x с помощью (например, с xlim ).

4. Спасибо, Маркус, это сделало это. R и factor, похоже, всегда меня понимают:-/ Код выше с меньшей шириной y <- rnorm (100) df <- data.frame( x = 1, y0 = min (y), y25 = квантиль (y, 0,25), y50 = медиана (y), y75 = квантиль (y, 0,75), y100 = max(y) ) ggplot(df, aes(as.factor(x))) geom_boxplot ( aes(ymin = y0, нижний = y25, средний = y50, верхний = y75, ymax = y100), ширина = 0,1, статистика = «идентичность»)

5. Да, ограничения по оси x, похоже, являются проблемой. Я установил фиксированные ограничения, и аргументы width, похоже, работают так, как задумано.

Ответ №1:

Проблема с приведенным вами примером, похоже, заключается в том, что значения X являются числовыми. Я не уверен, что boxplot — лучший способ, если у вас есть значения x и y, которые являются числовыми, но посмотрите Ответ Джона Белла, если это действительно то, что вы хотите.

Но, в случае, если ваши значения X на самом деле являются факторами, этот ответ должен сработать. Если вы создаете фрейм данных с факторами (группами), то width функциональность возвращается.

 data<-data.frame("Group"=as.factor(rep(c(1,2),16)),"Y"=rnorm(32))

ggplot(aes(x=Group,y=Y),data=data) 
  geom_boxplot(width=.15)
  

введите описание изображения здесь

 ggplot(aes(x=Group,y=Y),data=data) 
  geom_boxplot(width=1)
  

введите описание изображения здесь

Также, возможно, стоит проверить эту страницу USGS для получения советов по ggplot2 boxplots:https://owi.usgs.gov/blog/boxplots /

Комментарии:

1. Это странно. На странице документации geom_boxplot() аргумент с именем ‘width’ не упоминается. У вас есть какие-либо идеи, почему?

2.Это на самом деле так, просто этого нет в usage описании. Если вы прокрутите ближе к концу, вы найдете: Computed variables субтитры, и сразу под ними вы увидите: width width of boxplot

3. Но это упоминается как вычисляемая переменная, а не аргумент.

4. хм, да, я понимаю, о чем вы говорите. На самом деле я думаю, что это скрыто под аргументом ... » Other arguments passed on to layer(). These are often aesthetics, used to set an aesthetic to a fixed value, like color = "red" or size = 3. » Многие geom_ функции будут принимать ширину в качестве аргумента, но ни одна из них явно не говорит об этом в документации. Я думаю, что это подразумевается в ... , но я не уверен, где вы можете найти полный список этих «других» аргументов…

Ответ №2:

Добавление xlim (0,2) расширяет ось x и, таким образом, сужает boxplot:

 ggplot(df, aes(x))  
  geom_boxplot(
   aes(ymin = y0, lower = y25, middle = y50, upper = y75, ymax = y100),
   stat = "identity"
 )  
 xlim(0,2)