限制ggplot中boxplot中y轴的范围,而不会影响boxplot所基于的数据

时间:2017-03-24 14:17:07

标签: r ggplot2 limit boxplot

我正在使用ggplot创建一个boxplot。代码如下:

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)") 

这将输出以下图表:

Boxplot without limits in the y-axis

接下来,我想关注一系列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))

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

Boxplot after setting a limit to the y axis

显然,ggplot以某种方式改变了boxplot所基于的输入数据。但是,我的目的只是集中在盒子图的片段中,以便我可以更仔细地检查组之间的差异。我怎么能用ggplot做到这一点?

您的建议将不胜感激。

1 个答案:

答案 0 :(得分:0)

请使用scale_y_continuous(),而不是coord_cartesian()代码。

这个

scale_y_continuous(breaks =seq(0, .05, .01), limit = c(0, 0.05))

替换为

coord_cartesian(ylim = c(0,0.05))

还注意到你正试图表达意思。请注意,boxplot显示中位数不是平均值。也许你应该记住你的数据演示。 BoxPlots通常优于其他选项,因为它显示数据分布(例如异常值)和其他重要统计数据以进行比较。裁剪只显示中位数,因此可能不是一个好主意,而是只能使用geom_point()显示中位数。