限制 ggplot 中箱线图中 y 轴的范围而不影响箱线图所基于的数据

ak7*_*ak7 2 r limit ggplot2 boxplot

我正在使用 ggplot 创建箱线图。代码如下:

ggplot(my_data, aes(x = as.factor(viotiko), y = pd_1year, fill = as.factor(viotiko))) + geom_boxplot() +
  labs(title="Does the PD differ significantly by 'Viotiko' group?",x="Viotiko Group", y = "PD (pd_1year)") 
Run Code Online (Sandbox Code Playgroud)

这将输出以下图表:

y 轴无限制的箱线图

接下来,我想关注 y 值的范围 --[0, 0.05] -- 我再次运行更改参数的代码。我并不是要排除数据并改变均值和分布,而只是关注特定范围的 y 值。代码又是这样的:

ggplot(my_data, aes(x = as.factor(viotiko), y = pd_1year, fill = as.factor(viotiko))) + geom_boxplot() +
  labs(title="Does the PD differ significantly by 'Viotiko' group?",x="Viotiko Group", y = "PD (pd_1year)") +
  scale_y_continuous(breaks =seq(0, .05, .01), limit = c(0, 0.05))
Run Code Online (Sandbox Code Playgroud)

这返回了一个警告“删除了 173664 行包含非有限值 (stat_boxplot)”。并输出如下图:

对 y 轴设置限制后的箱线图

显然, ggplot 以某种方式改变了箱线图所基于的输入数据。但是,我的目的只是关注箱线图的一部分,以便我可以更仔细地检查组之间的差异。如何使用 ggplot 执行此操作?

您的建议将不胜感激。

M_S*_*mal 5

代替您的scale_y_continuous()代码,使用coord_cartesian()如下。

这个

scale_y_continuous(breaks =seq(0, .05, .01), limit = c(0, 0.05))
Run Code Online (Sandbox Code Playgroud)

用这个替换

coord_cartesian(ylim = c(0,0.05))
Run Code Online (Sandbox Code Playgroud)

还注意到你试图表现出意思。请注意,箱线图显示的中位数不是均值。也许您应该在数据演示中记住一些事情。此外,BoxPlots 通常比其他选项更受欢迎,因为它显示数据分布(例如异常值)和其他用于比较的重要统计数据。裁剪仅显示中位数,因此可能不是一个好主意,而您只能使用geom_point().