Base R与ggplot2绘制的箱线图不匹配问题求助
问题原因与解决方法
1. 箱线图不匹配+警告的根源
你遇到的两个问题是同一个原因:ylim(0,100)会直接删除超出该范围的数据行,而非仅调整图表显示范围。
- Base R的
boxplot()基于全部数据计算四分位数、中位数等统计量,之后自动适配轴范围; - 但ggplot的
ylim()会把y值不在0-100区间内的行直接过滤掉(哪怕数据没有NA,超出范围的数值也会被判定为“非有限值”),这就是警告“Removed 845 rows...”的来源。用过滤后的数据计算箱线图统计量,结果自然和Base R用全量数据得到的不一致。
2. 解决方法
把ylim(0,100)替换成coord_cartesian(ylim = c(0,100)),这个函数仅缩放图表的显示范围,不会删除任何数据,箱线图的统计量会基于全量数据计算,和Base R的结果一致,警告也会消失。
修改后的代码:
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) + coord_cartesian(ylim = c(0, 100)) # 替换原ylim p1 + p2 + plot_layout(ncol = 2)
内容的提问来源于stack exchange,提问作者Soumitra
相关产品推荐
相关产品推荐

