在R 中如何在Y 轴上添加一个断点?
我有一个数据集,需要把“Year”作为因子来绘制箱线图,将y 轴在0.07到 1.5之间分段,并在数值为2 的位置添加一条水平线以指示阈值。我尝试使用下面的R 代码,但没成功。有什么建议吗?
以下是我的数据集和我至今使用的R 代码:
Sample_data <- structure(list(Year = c(2008L, 2008L, 2008L, 2008L, 2008L, 2008L,
2008L, 2008L, 2008L, 2008L, 2010L, 2010L, 2010L, 2010L, 2010L,
2010L, 2010L, 2010L, 2010L, 2010L, 2012L, 2012L, 2012L, 2012L,
2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2014L, 2014L, 2014L,
2014L, 2014L, 2014L, 2014L, 2014L, 2014L, 2014L, 2019L, 2019L,
2019L, 2019L, 2019L, 2025L, 2025L, 2025L, 2025L, 2025L), Value = c(0.035,
0.031, 0.027, 0.036, 0.026, 2, 2, 2, 2, 2, 0.027, 0.026, 0.037,
0.0173, 0.032, 2, 2, 2, 2, 2, 0.032, 0.038, 0.038, 0.025, 0.036,
2, 2, 2, 2, 2, 0.022, 0.016, 0.031, 0.026, 0.017, 2, 2, 2, 2,
2, 0.022, 0.014, 0.027, 0.016, 0.024, 0.019, 0.021, 0.022, 0.02,
0.039), Treshold = c(2L, 2L, 2L, 2L, 2L, NA, NA, NA, NA, NA,
2L, 2L, 2L, 2L, 2L, NA, NA, NA, NA, NA, 2L, 2L, 2L, 2L, 2L, NA,
NA, NA, NA, NA, 2L, 2L, 2L, 2L, 2L, NA, NA, NA, NA, NA, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L)), row.names = c(NA, -50L), class = "data.frame")
library(ggplot2)
library(ggbreak)
p = ggplot() +
geom_boxplot(data=Sample_data,aes(x=factor(Year) ,y=Value)) +
geom_col() +
scale_y_break(c(0.0, 0.07)) +
geom_hline(yintercept = 2, color = "red",
linetype = "solid",linewidth=1)
p
解决方案
我从你昨天的评论中得到的最佳猜测是,你想把y 轴的大部分范围裁剪掉,从0.07到 1.99,保持y 轴断点的宽度一致,在顶部区域仅显示1.99和 2的断点标签,并且不显示次坐标轴。
我能够用昨天评论中的代码完成前三项,但在我同时使用 scale_y_continuous(用来指定断点宽度,因为我在 scale_y_break 中看不到如何设置)和 scale_y_break 时,似乎会出现一个意外的结果,即创建了一个二级坐标轴。作为一个临时的变通,我们可以把主题中的刻度和文本删掉,但最好还是从一开始就避免创建二级坐标轴。
ggplot() +
geom_boxplot(data=Sample_data, aes(x = factor(Year), y = Value)) +
scale_y_break(c(0.07, 1.99)) +
scale_y_continuous(breaks = scales::breaks_width(0.01)) +
geom_hline(yintercept = 2, color = "red", linetype = "solid", linewidth = 1) +
theme(
axis.text.y.right = element_blank(),
axis.ticks.y.right = element_blank(),
axis.title.y.right = element_blank()
)
我不愿意箱线图不显示中位数,这让我很困扰,因此另一种版本(也许是个灾难性的版本?)可以使用两组断点,与 scale_y_break(c(0.05, 1, 1.04, 1.99)) +:
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

