具有比例权重的Boxplot,其中已为分类变量定义了摘要统计

时间:2017-01-04 19:18:32

标签: r ggplot2 boxplot

我正在尝试制作一个箱形图,其中框的宽度与其数字大小成比例。我已经为分类X变量计算了汇总统计量:(n,p5,p25,p50,p75,p95)。我做了一些研究并尝试使用" n"变量作为一组权重,以及使用" varwidth = TRUE" geom_boxplot中的参数。这些都不适合我。当您已经计算出数据的摘要统计数据时,有没有办法添加比例宽度?以下是我的代码的示例:

src <- c("a", "b", "c")
n <- c(10, 20, 30)
p5 <- c(-10, -20, -15)
p25 <- c(-5, -10, -10)
p50 <- c(5, 0, 5)
p75 <- c(10, 5, 15)
p95 <- c(15, 20, 30)

df <- data.frame(src, n, p5, p25, p50, p75, p95)

MonthsSrc <- ggplot(data=df, aes(x=factor(src), ymin=p5, lower=p25, middle=p50, upper=p75, ymax=p95)) +
  geom_boxplot(stat="identity", fill="white", colour="black", varwidth=TRUE) +
  scale_y_continuous(name="Value(%)", limits=c(-30,30), breaks=c(-30,-15,0,15,30), labels=c(-30,-15,0,15,30)) +
  theme_classic() +
  theme(axis.line.x=element_line(color="black",size=0.5),
        axis.line.y=element_line(color="black",size=0.5))

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

一种(hacky)这样做的方法是使用varwidth=T,这意味着宽度与sqrt(n)成比例。然后我们可以使用weight美学将n带到weight=sqrt(n),因为sqrt(n)* sqrt(n)= n。

来自mpg的{​​{1}}数据集的示例:

ggplot2

可能有更好的解决方案。