如何使用ggplot2绘制与绘图线交叉的水平线和垂直线?

Dan*_* C. 5 r line ggplot2 geom-hline geom-vline

我用一条线连接点绘制了一个图。在此图中,我想从 x 轴上的一点到与绘图线的交点绘制一条垂直线。在交点处,我想绘制一条到 Y 轴的水平线。我搜索了几个网站、论坛和教程,但仍然做不到。有什么帮助吗?

library(ggplot2)

X <- 1:5
Y <- c(2, 6, 4, 7, 12)

DF <- data.frame(X, Y)

ggplot(data = DF,
       aes(x = X,
           y = Y)) +
  geom_point() +
  geom_line() +
  geom_vline(xintercept = 4.5,
             linetype = 2)
Run Code Online (Sandbox Code Playgroud)

到目前为止的结果:

在此输入图像描述

期望结果的示例:

在此输入图像描述 在此输入图像描述

ste*_*fan 3

正如 @Eric 在他的评论中已经提到的那样,geom_segment这是实现您想要的结果的方法。此外,您必须手动计算y段应切割的值,geom_line这可以使用 来实现approx。快速方法可能如下所示:

library(ggplot2)

X <- 1:5
Y <- c(2, 6, 4, 7, 12)

DF <- data.frame(X, Y)

# vertical line
vsegment <- function(x, X, Y) {
  geom_segment(aes(x = x, xend = x, y = -Inf, yend = approx(X, Y, x)$y),
               linetype = 2)  
}
# horizontal line
hsegment <- function(x, X, Y) {
  geom_segment(aes(x = -Inf, xend = x, y = approx(X, Y, x)$y, yend = approx(X, Y, x)$y),
               linetype = 2)  
}
ggplot(data = DF,
       aes(x = X,
           y = Y)) +
  geom_point() +
  geom_line() +
  vsegment(4.5, X, Y) +
  hsegment(4.5, X, Y)
Run Code Online (Sandbox Code Playgroud)