【发布时间】:2017-12-10 15:42:57
【问题描述】:
我试图在箱线图须的末端放置观察计数的标签,但是当存在异常值时它似乎不起作用。
我试图将最大/最小值与我认为计算出的晶须长度 [四分位 1(或四分位 3)+(或 -)1.5 * 四分位间距] 进行比较。但是标签既没有放置在最大值/最小值处,也没有放置在晶须末端。
示例使用mtcars和y轴反转来演示:
library(ggplot2,dplyr)
mtcars %>%
select(qsec, cyl,am) %>%
ggplot(aes(factor(cyl),qsec,fill=factor(am))) +
stat_boxplot(geom = "errorbar") + ## Draw horizontal lines across ends of whiskers
geom_boxplot(outlier.shape=1, outlier.size=3,
position = position_dodge(width = 0.75)) +
scale_y_reverse() +
geom_text(data = mtcars %>%
select(qsec,cyl,am) %>%
group_by(cyl, am) %>%
summarize(min_qsec = min(qsec),Count = n(),med = median(qsec),
q1 = quantile(qsec,0.25),
q3 = quantile(qsec,0.75), iqr = IQR(qsec),
qsec = mean(qsec),
lab_pos = max(min_qsec, q1-1.5*iqr)),
aes(y=lab_pos,label = Count), position = position_dodge(width = 0.75))
产生:
am(1)cyl(4) 和 am(0)cyl(8) 的标签未对齐。
我对@987654329@ 的计算是否不正确,或者是否有更好的方法在晶须末端放置标签,而不管异常值如何?如果可能的话,我想使用ggplot2 和dplyr 来完成它
【问题讨论】:
-
看起来胡须延伸到上下栅栏内的最远点 (Q1/Q3 -/+ 1.5 * IQR)。您应该能够计算这些点的位置,尽管可能必须在 ggplot aes 语句之外执行此操作。
-
这就是我正在计算(或试图计算)的 lab_pos 变量。如果最大值是异常值,则应该将胡须的末端设置为 lab_pos