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
中的参数 breaks
、minor_breaks
和 expand
都未使用?
我相信您可以使用scale_y_continuous
和coord_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轴限制的主要内容,如果未能解决你的问题,请参考以下文章
R语言ggplot2可视化时间序列数据:ggplot2可视化在时间轴上添加按月的箱图(boxplot)
R语言ggplot2可视化分组箱图并在图像的右侧添加轴须图(rug plot)以及每个rug对应的标签信息(ggplot2 boxplot with labelled rug in R)