[英]Draw a diagonal line from a specific geom_point() in ggplot2
我想从geom_point()
的特定geom_point()
开始画一条对角线。 该线将从点( x = 21
, y = 0.37
)开始,并在第一个点与最后一个点之间产生的对角线处结束(请参见下文:)
library(dplyr)
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
library(ggplot2)
df <- structure(list(x = c(0, 8, 12, 16, 20, 24, 28, 32, 33.33), y = c(0.2,
0.212, 0.22, 0.26, 0.339, 0.452, 0.654, 1.001, 1.155)), class = c("tbl_df",
"tbl", "data.frame"), row.names = c(NA, -9L))
df %>%
ggplot(aes(x, y)) +
geom_point(shape = 21, size = 4) +
geom_smooth(data = filter(df, row_number() %in% c(1, n())), method = "lm") +
geom_point(aes(x = 21, y = .37), shape = 21, size = 4, fill = "blue") +
theme_light()
#> Warning in qt((1 - level)/2, df): NaNs produced
由reprex软件包 (v0.2.1)创建于2019-03-17
编辑:
我要寻找的结果示例:
由于我稍后将要解释的原因,这不是一个好看的解决方案。 但这确实符合问题的要求。
首先,辅助功能。
#
# computes the intersection point of the
# line passing through x perpendicular to
# the line defined by PQ
#
perp_line <- function(x, P, Q){
a <- Q[2] - P[2]
b <- -(Q[1] - P[1])
A <- matrix(c(a, b, b, -a), nrow = 2)
c1 <- -b*P[2] - a*P[1]
c2 <- -b*x[1] + a*x[2]
cc <- c(-c1, -c2)
solve(A, cc)
}
现在,使用该函数获取所需点的坐标,并从蓝点到计算出的点绘制一条线段。
X <- unlist(df[1, ])
Y <- unlist(df[nrow(df), ])
Z <- perp_line(c(21, 0.37), X, Y)
df %>%
ggplot(aes(x, y)) +
geom_point(shape = 21, size = 4) +
geom_smooth(data = filter(df, row_number() %in% c(1, n())), method = "lm") +
geom_point(aes(x = 21, y = .37), shape = 21, size = 4, fill = "blue") +
geom_segment(aes(x = x2, y = y2, xend = Z[1], yend = Z[2])) +
#coord_fixed(ratio = 1) +
theme_light()
从图中可以看到,纵横比非常糟糕。 您的x
和y
轴范围如此之大,以至于线条看起来都不是垂直的。 取消注释coord_fixed
代码行以获得更好的宽高比,但是您将看不到任何内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.