似乎无法调整箱线图宽度

时间:2019-04-23 18:00:31

标签: r ggplot2 boxplot

我无法更改ggplot2 boxplot的宽度。

我知道大概有千分之一的人提出与此类似的问题,但是在花了最后两个小时试图找到解决方案之后(我很少这样做),我全力以赴。

此外,我想知道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"
 )

我试图更改宽度,以至于它不是带有箱线图的整个图形,无济于事。我试过在ggplot,geom_boxplot和aes中将width = 0.5 / width = 0.1放进去,它什么也没改变。

有人可以帮忙吗?谢谢

编辑:感谢您的帮助。为了将来参考,我使用的代码是:

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

2 个答案:

答案 0 :(得分:1)

添加xlim(0,2)会使x轴变宽,从而使箱线图变窄:

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

答案 1 :(得分:0)

您给出的示例的问题似乎是X值是数字。如果您同时拥有x和y都是数字值,我不确定箱线图是最好的方法,但是,如果实际上这是您想要的,请参阅John Bell的答案。

但是,在您的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)

enter image description here

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

enter image description here

也许也值得在USGS页面上查看ggplot2箱线图的技巧:https://owi.usgs.gov/blog/boxplots/