#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)