我使用了常规的“盒图”函数来检查我的数据的极值值。对于项目中的演示文稿,我使用ggpubr包(它建立在ggplot2上)创建了相同的方块图。
据我所知,胡须应代表相同的区域,在这两个污点。令我惊讶的是,在ggpubr框图中出现了一个极值,而r- not图中没有显示它。
代码R-框图:
boxplot(data$vtrust_post1, data$vtrust_post2)代码Ggpubr:
vtrust_a_b_long %>%
ggboxplot(x = "drive", y = "count", bxp.errorbar = TRUE)对于ggpubr,我必须将数据转换成长格式:
vtrust_a_b <- data.frame("subject_no" = data$id, "a" = data$vtrust_post1, "b" = data$vtrust_post2)
vtrust_a_b_long <- vtrust_a_b %>%
gather(key = "drive", value = "count", a, b)我做错什么了吗?这两个数据都包含相同的最大值。在r盒图和ggpubr/ggplot2 2中,极端值的定义会有所不同吗?
我非常感谢你的帮助!
更新:再现问题的代码
使用此代码,它仅表示ggpubr版本的极值。
a <- c(1.50, 3.50, 1.50, 3.00, 1.25, 5.25, 2.50, 2.50, 1.50, 2.25, 1.75, 2.25, 2.25, 2.25, 4.50, 2.25, 3.25, 1.25, 2.50, 2.75, 1.75, 4.25, 2.75, 2.00,
1.75, 3.50, 3.25, 3.00, 1.25, 1.25, 3.75, 1.50, 1.75, 2.25, 1.25, 2.00, 1.50, 3.50, 1.75, 3.25)
boxplot(a)
ggpubr::ggboxplot(a)由于更新2的提示,它可能是由R内的本地设置引起的,我在https://rdrr.io/snippets/上尝试了代码。同样,这一差异也发生在:
发布于 2020-11-25 21:56:23
回顾R基graphics::boxplot的源代码,第48行显示晶须是由grDevices::boxplot.stats计算的。查看boxplot.stats的源代码(在提示符处输入它),就会发现它使用stats::fivenum来计算距离来绘制晶须。
fivenum(a)
#[1] 1.250 1.625 2.250 3.125 5.250graphics::boxplot源的第156和157行显示晶须从第2值延伸到第1值,然后从第4值延伸到第5值。
相反,回顾geom_boxplot的源显示,晶须延伸到最近的数据点,从铰链到IQR的不超过1.5倍。这是由stats::quantile计算的
quantile(a,0.75) + diff(quantile(a,c(0, 0.25, 0.5, 0.75, 1))[c(2,4)])*1.5
#5.125 由于a的元素6是5.25,它比5.125更多,因此,晶须不会延伸到这一点。
https://stackoverflow.com/questions/65009078
复制相似问题