基于R语言的箱线图和ggplot2包绘制的箱线图不一致。

4

我有一个简单的数据集。当我分别使用基础R和ggplot生成数据的箱线图时,它们不匹配。事实上,基础R的箱线图与summary函数一致。

library(tidyverse)
library(ggplotify)
library(patchwork)

df <- read.csv("test_boxplot_data.csv")

summary(df)

p1 <- as.ggplot(~boxplot(df$y, outline=FALSE))
p2 <- ggplot(df, aes(y=y)) + geom_boxplot(outlier.shape = NA) + ylim(0,100)

p1 + p2 + plot_layout(ncol = 2)


生成的图表保存在这里,你有什么线索吗?另外让人惊讶的是ggplot会抛出警告“已删除845行包含非有限值的数据(stat_boxplot)”,但是数据中没有NA。


3
也许你想使用 coord_cartesian ,即 + coord_cartesian(ylim = c(0, 100)) ,根据 ?coord_cartesian - 在坐标系上设置限制将缩放图形(就像你正在用放大镜观察它一样),并不会像设置比例尺限制那样改变基础数据。 - akrun
请查看此处 https://github.com/tidyverse/ggplot2/issues/4469,还有相关的 https://dev59.com/E3zaa4cB1Zd3GeqPRIcS 和 https://github.com/tidyverse/ggplot2/issues/3204。 - TarJae
1
感谢@TarJae指出这些。 - Soumitra
1个回答

4

内容翻译如下:

来自信息:"已删除845行包含非有限值的数据(stat_boxplot)"。恰巧这些数据包含845个大于100的点,在绘制箱线图时将删除这些点。

ylim()的第一行帮助文档中得知:
" 这是向各个比例尺提供极限参数的快捷方式。默认情况下,任何在指定范围之外的值都会被替换为NA。请注意,这将删除超出限制范围的数据,可能会产生意想不到的结果。如果需要更改x或y轴限制而又不删除数据观察值,请参见coord_cartesian()。"

这应该会提供所需的图形:

ggplot(df, aes(y=y)) + geom_boxplot(outlier.shape = NA) + 
       coord_cartesian(ylim=c(0,100))

enter image description here


非常感谢 @Dave2e。你为我节省了很多时间。 - Soumitra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接