R ggplot boxplot:更改y轴限制

Posted

技术标签:

【中文标题】R ggplot boxplot:更改y轴限制【英文标题】:R ggplot boxplot: change y-axis limit 【发布时间】:2015-03-27 17:28:54 【问题描述】:

我正在使用ggplot 从以下数据创建多个箱线图:

df<-(structure(list(Effect2 = c("A2", "A2", "A2", "A2", "A2", "A2", 
"A2", "A2", "A2", "A2", "A2", "A2", "A2", "A2", "A1", "A1", "A1", 
"A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", "A1", 
"A3", "A3", "A3", "A3", "A3", "A3", "A3", "A3", "A3", "A3", "A3", 
"A3", "A3", "A3", "A3", "A3", "A3", "A3", "A3", "A3", "A3", "A3", 
"A3", "A3", "A3", "A3", "A3", "A3", "A3", "A3", "A3", "A3", "A3", 
"A3", "A3", "A3", "A3", "A3", "A3", "A3", "A3", "A3", "A3", "A3", 
"A3", "A3", "B1", "B1", "B1", "B1", "B1", "B1", "B1", "B1", "B1", 
"B1", "B1", "B1", "B1", "B1", "B1", "B1", "B1", "B1", "B1", "B1", 
"B1", "B1", "B1", "B1", "B1", "B1", "B1", "B1", "B1", "B1", "B1", 
"B1", "B1", "B1", "B1", "B1", "B1", "B1", "B1", "B1", "B1", "B1", 
"B1", "B1", "B1", "B1", "B1", "B1", "B1", "B1", "B1", "B1", "B1", 
"B1", "B1", "B1", "B1", "B1", "B1", "B1", "B1", "B1", "B1", "B1", 
"B1", "B1", "B1", "B1", "B1", "B1", "B1", "B1", "C3", "C3", "C3", 
"C3", "C3", "C3", "C3", "C3", "C3", "C3", "C3", "C3", "C3", "C3", 
"C3", "C3", "C3", "C3", "C3", "C3", "C3", "C3", "C2", "C2", "C2", 
"C2", "C2", "C2", "C2", "C4", "C4", "C4", "C4", "C4", "C4", "C4", 
"C4", "C4", "C4", "C4", "C1", "C1", "C1", "C1", "C1", "C1", "C1", 
"C1", "C1", "C1", "C1", "C1", "C1", "C1", "C1", "C1", "C1", "C1", 
"C1", "C1", "C1", "C1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", 
"D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", 
"D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", 
"D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", 
"D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", 
"E1", "E1", "E1", "E1", "E1", "E1", "E1", "E1", "E1", "E1", "E1", 
"E1", "E1", "E1", "E1", "E1", "E1", "E1", "E1", "E1", "E1", "E1", 
"E1", "E1", "E1", "E1", "F1", "F1", "F1", "F1", "F1", "F1", "F1", 
"F1", "F1", "F1", "F1", "F1", "F1", "F1", "F1", "F1", "F1", "F1", 
"F1", "F1", "G1", "G1", "G1", "G1", "G1", "G1", "G1", "G1", "G1", 
"G1", "G1", "G1", "G1", "G1", "G1", "G1", "G1", "G1", "G2", "H1", 
"H1", "H1", "H1", "H1", "H1", "H1", "H1", "H1", "H1", "H1", "H1", 
"H1", "H1", "H1", "H1", "H1", "H1", "H1", "H1", "H1", "H1", "H1", 
"H1", "H1", "H2", "H2", "H2", "H2", "H2", "H2", "H2", "H2", "H2", 
"H2", "H2", "H2", "H2", "H2", "H2", "H2", "H2", "H2", "H2", "H2", 
"H2", "H2", "H2", "H2", "H2", "H2", "H2", "H2", "H2", "H2", "H2", 
"H2", "H2", "H2", "H2", "H2", "H2", "H2", "H2", "H2", "H2", "H2", 
"H2", "H2", "H2", "H2", "H3", "H3", "H3", "H3", "H3", "H3", "H3", 
"H3", "H3", "H3", "H3", "H3", "H3", "H3", "H3", "H3", "H3", "H3", 
"H3", "H3", "H3", "H3", "H3", "H3", "H3", "H3", "H3", "H3", "H3", 
"H3", "H3", "H3", "H3", "H3", "H3", "H3", "H3", "H3", "H3", "H3", 
"H3", "H3", "H3", "H3", "H3", "H3", "H3", "H3", "H3", "H3", "H3", 
"H3", "H3", "H3", "H3", "H3", "H3", "H3", "H3", "H3", "H3", "H3", 
"H3", "H3", "H3", "H3", "H3", "H3", "H3", "H3", "H3", "H3", "H3", 
"H3", "H3", "H4", "H4", "H4", "H4", "H4", "H4", "H4", "H4", "H4", 
"H4", "H4", "H4", "H4", "H4", "H4", "H4", "H4", "H4", "H4", "H4", 
"H4", "H4", "H4", "H4", "H4", "H4", "H4", "H4", "H4", "H4", "H4", 
"H4", "H4", "H4", "H4", "H4", "H4", "H4", "H4", "H4", "H4", "H4"
), OddsRatioEst = c(0.07, 17.79, 3.16, 4.57, 5.34, 0.09, 0.15, 
0.1, 0.41, 2.16, 2.17, 0.2, 4.32, 5.94, 0.09, 3.28, 10.37, 8.49, 
3.15, 0.15, 0.15, 0.34, 13.78, 0.08, 0.04, 6.01, 0.08, 0.07, 
3.63, 7.92, 2.71, 11.41, 12.52, 80.85, 4.72, 3.4, 6.25, 12.05, 
8.7, 2.28, 3.63, 2.83, 2.36, 3.81, 12.73, 7.77, 3.15, 3.24, 51.21, 
6.99, 7.05, 3.39, 1.93, 4.6, 4.55, 16.3, 41.46, 1.99, 2.07, 2.27, 
9.94, 8.35, 3.27, 4.41, 5, 5.35, 11.47, 4.05, 3.06, 3.05, 8.45, 
2.68, 2.45, 4.41, 25.53, 3.74, 18.2, 2.27, 4.19, 2.69, 13.24, 
8.31, 12.96, 8.46, 11.22, 5.28, 18.88, 5.58, 5.96, 3.98, 8.46, 
2.23, 102.55, 6.48, 2.64, 3.78, 4.25, 3.64, 4.21, 5.19, 2.43, 
6.79, 2.68, 10.31, 7.44, 11.89, 5.53, 16.65, 5.99, 9.37, 19.29, 
5.12, 2.42, 2.98, 11.38, 14.45, 3.72, 4.38, 19.8, 6.29, 6.74, 
9.77, 11.78, 22.23, 3.61, 4.77, 12.05, 7.13, 35.14, 84.47, 8.99, 
10.16, 8.79, 11.21, 9.27, 130.54, 5.09, 22.14, 34.78, 11.93, 
46.06, 4.84, 8.79, 36.47, 15.92, 20.78, 0.07, 0.18, 0.17, 0.36, 
0.23, 0.57, 0.17, 0.41, 0.15, 0.2, 0.58, 0.62, 0.08, 0.53, 2.68, 
0.14, 0.37, 0.19, 0.25, 0.33, 1.68, 0.13, 7.93, 7.77, 108.84, 
6.82, 7.12, 14.64, 2016.8, 4.94, 2.86, 3, 74.58, 6.96, 11.82, 
3.43, 3.02, 17.94, 40.41, 11.23, 3.32, 0.44, 0.51, 0.43, 0.02, 
4.42, 4.74, 2.65, 1.77, 3.58, 0.34, 2.49, 1.68, 4.58, 2.62, 13.75, 
0.48, 1.59, 0.01, 0.13, 0.1, 17.42, 11.34, 17.29, 3.32, 6.82, 
7.06, 4.96, 3.04, 10.39, 0.29, 2.5, 3.39, 7.27, 19.25, 6.54, 
14.29, 101.56, 11.86, 24.13, 12.77, 6.21, 9.35, 5.09, 8.72, 9.93, 
2.77, 16.64, 6.64, 4.51, 11.98, 6.99, 2.69, 2.93, 4.54, 3.35, 
2.48, 10.31, 1.69, 160.8, 7.69, 2.73, 37.65, 220.84, 14.02, 4.18, 
158.82, 25.92, 10.85, 7.29, 24.36, 7.16, 64.93, 3.25, 2.95, 1.72, 
1.71, 3.66, 2.34, 3.49, 0.24, 3.67, 2.94, 0.11, 1.52, 2.09, 1.61, 
1.55, 1.59, 2.5, 0.19, 4.1, 2.65, 2.59, 1.29, 11.68, 4.81, 0.09, 
3.14, 2.08, 0.01, 0.11, 0.27, 8.01, 5.59, 0.46, 0.33, 4.32, 0.47, 
2.27, 0.02, 0.11, 0.23, 4.13, 1.98, 12.67, 0.24, 7.55, 5.79, 
0.01, 5.85, 0.02, 19.41, 6.51, 0.51, 0.04, 3.26, 0.12, 6.34, 
0.25, 0.07, 0.06, 13.71, 1.85, 277.25, 111.76, 548.23, 30.23, 
4.63, 3.04, 5.23, 5.37, 0.16, 4.53, 0.09, 0.13, 2.05, 2.04, 2.64, 
11.35, 2.47, 29.4, 0.26, 2.1, 1.83, 0.85, 7.33, 4.84, 0.1, 22.84, 
31.24, 18.17, 4.08, 5.32, 11.99, 6.21, 0.26, 15.2, 16.84, 2.55, 
12.22, 3.2, 14.25, 0.02, 2.62, 0.38, 4.64, 23.27, 2.47, 6.57, 
2.41, 8.64, 2.4, 7.06, 4.8, 167.14, 3.05, 27.73, 25.86, 5.84, 
4.68, 5.1, 11.55, 10.55, 44.11, 21.53, 7.95, 6.06, 9.41, 26.45, 
24.42, 6.95, 79.77, 120.19, 67.39, 5.79, 23.37, 234.51, 41.03, 
10.67, 11.29, 13.07, 56.72, 86.03, 723.44, 40.78, 238.65, 12.76, 
765.98, 42.38, 13.33, 30.93, 12.92, 12.8, 15.5, 104.96, 15.69, 
111.41, 47.93, 17.37, 94.1, 32.88, 58.79, 31.44, 7.7, 81.19, 
84.48, 411.86, 69.94, 17.27, 21.52, 35.4, 15.74, 5.52, 15.03, 
31, 24.32, 29.6, 23.08, 251.96, 8257.41, 43.17, 237.92, 9.05, 
61.38, 5.65, 15.66, 7.87, 302850763, 13.21, 81.4, 31.63, 69.81, 
10.89, 192.84, 168.78, 389.25, 7.08, 18.41, 53.07, 5.82, 128.07, 
50.1, 142.92, 26.9, 629.3, 28.91, 1006.21, 2349.3, 320.77, 136.88, 
115.99, 15, 4884.28, 9.97, 5.91, 6.08, 5.11, 7.39, 7.68, 4.77, 
5.42, 3.49, 4.16, 11.32, 0, 4.01, 4.91, 9.08, 18.33, 10.86, 12.95, 
10.64, 6.03, 2.71, 4.93, 7.64, 345.75, 24, 3.92, 4.48, 9.36, 
1.22, 4, 30.22, 31.37, 56.32, 25.68, 5.42, 66, 15.03, 9.75, 27.1, 
9.36, 74.58, 21.51)), .Names = c("Effect2", "OddsRatioEst"), class = "data.frame", row.names = c(NA, 
-512L))

数据中有几个极端的异常值会拉伸 y 轴,因此图表完全没有用:

我使用以下内容更改了 y 限制:

ggplot(df, aes(x=Effect2, y=OddsRatioEst)) + geom_boxplot(outlier.colour=NA) +
  scale_y_continuous(limits=c(0,100), breaks=seq(0,100,10), expand = c(0, 0))

看起来更好,

但这会产生以下警告:

Warning message:
Removed 37 rows containing non-finite values (stat_boxplot)

我意识到实际上箱线图已重新调整为但是我设置了我的限制 - 例如Q1、Q2 和 Q3 的值减小。 如何在不包含大异常值的情况下获得箱线图的真实表示?

【问题讨论】:

【参考方案1】:

使用coord_cartesian 代替scale_y_continuous

ggplot(df, aes(x=Effect2, y=OddsRatioEst)) +
    geom_boxplot(outlier.colour=NA) + 
    coord_cartesian(ylim = c(0, 100))

来自coord_cartesian 文档:

在坐标系上设置限制将缩放绘图(如 你用放大镜看它),并且不会改变 基础数据,例如在规模上设置限制。

输出如下。如您所见,不删除这些异常值会在一定程度上改变图片,因此您可能还想更改 y 限制。

【讨论】:

谢谢。有没有办法使用此方法设置中断,因为 coord_cartesian 中的参数 breaksminor_breaksexpand 都未使用? 我相信您可以使用scale_y_continuouscoord_cartesian 来修改例如轴中断(只是不要提供ylim 参数)。 也可以使用对数刻度:scale_y_log10() + coord_trans(y="log10") + 这很重要@Joe ...事实上,我曾经使用scale_y_continuous 来做到这一点。但是在箱线图的情况下,如果您使用后者,它会修改您的箱线图,就像您将数据过滤到这些限制一样。因此,使用coord_cartesian 而不是scale_y_continuous 来设置限制非常重要。 @user2568648 如果你想设置刻度,你可以使用scale_y_continuous(breaks = pretty( c(0,100) , n = 5) ),其中 n 是你想要的刻度数。请注意,我没有在 scale_y_continuous 中使用限制。

以上是关于R ggplot boxplot:更改y轴限制的主要内容,如果未能解决你的问题,请参考以下文章

使用ggplot2更改R中的x轴刻度标签[重复]

R语言ggplot2可视化时间序列数据:ggplot2可视化在时间轴上添加按月的箱图(boxplot)

R语言ggplot2可视化分组箱图并在图像的右侧添加轴须图(rug plot)以及每个rug对应的标签信息(ggplot2 boxplot with labelled rug in R)

ggplot boxplot 按组,显示更改汇总统计信息

R:绘制具有连续x轴的箱线图:为每个框选择一个间隔

如何使用 ggplot 更改轴上数字的格式?