我有一個data.frame包含 4 個點的點,它在使用以下連接時會創建一個三角形geom_path:
library(ggplot2)
triangle = data.frame(x = c(0, 0.5, 1, 0),
y = c(0, 0.5, 0, 0))
ggplot(triangle, aes(x, y))
geom_path()

現在,我想創建一個新的(data.frame基于),它有 4 個點(triangle例如xmin、xmax、ymin、每個點)。ymaxdata.frame
這是一個例子:

是否可以在不對正方形的邊進行硬編碼的情況下做到這一點?
uj5u.com熱心網友回復:
由于正方形將成一定角度,因此您可能需要輸出以頂點的 x、y 坐標表示。這只需要一點觸發。以下函式采用表示閉合三角形的 x、y 點向量,并回傳每邊正方形頂點的資料框:
make_squares <- function(x, y) {
x1 <- x[-4]
x2 <- x[-1]
xdiff <- (x2 - x1)
y1 <- y[-4]
y2 <- y[-1]
ydiff <- (y2 - y1)
lengths <- sqrt(xdiff^2 ydiff^2)
angles <- atan2(ydiff, xdiff)
x3 <- x2 - sin(angles) * lengths
x4 <- x1 - sin(angles) * lengths
y3 <- y2 cos(angles) * lengths
y4 <- y1 cos(angles) * lengths
df <- data.frame(x = round(c(x1, x2, x3, x4, x1), 3),
y = round(c(y1, y2, y3, y4, y1), 3),
square = rep(1:3, 5))
`row.names<-`(df[order(df$square),], NULL)
}
輸出如下所示:
make_squares(triangle$x, triangle$y)
#> x y square
#> 1 0.0 0.0 1
#> 2 0.5 0.5 1
#> 3 0.0 1.0 1
#> 4 -0.5 0.5 1
#> 5 0.0 0.0 1
#> 6 0.5 0.5 2
#> 7 1.0 0.0 2
#> 8 1.5 0.5 2
#> 9 1.0 1.0 2
#> 10 0.5 0.5 2
#> 11 1.0 0.0 3
#> 12 0.0 0.0 3
#> 13 0.0 -1.0 3
#> 14 1.0 -1.0 3
#> 15 1.0 0.0 3
你可以像這樣在你的情節中使用它:
ggplot(triangle, aes(x, y))
geom_path()
geom_polygon(data = make_squares(triangle$x, triangle$y),
aes(group = square), fill = "green4", color = "black")
coord_equal()

轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/462768.html
