You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 06:18:24