Если вам удобно использовать оболочку для sp
SpatialLine объекта, вы можете попробовать пакет oceanmap
, который имеет довольно полезную функцию под названием SpatialCircle()
.По сути, он строит круг с помощью seq()
и корректирует его для координат вашей центральной точки x и y и для вашего радиуса r.Это все еще набор линейных сегментов (поэтому не одна изогнутая линия ), но довольно простой в использовании.
Результат:

Код:
Довольно просто:
# Load libraries.
library(oceanmap)
# Generate plot window and data.
set.seed(1702)
plot.new()
plot.window(xlim = c(0, 20), ylim = c(0, 10),
asp = 1, xaxs = "i", yaxs = "i")
axis(1)
axis(2)
box()
n <- 1000
x <- runif(n, 0, 20)
y <- runif(n, 0, 10)
for (i in 1:n) {
circle <- SpatialCircle(x = x[i], y = y[i], r = 0.1, n = 1000)
lines(circle)
}
Это также работает с ggplot2 с некоторыми обработками данных.
Добавление: Precision of SpatialCircles
Если вы хотите проверить, что на самом деле означает n (точность) в функции SpatialCircle()
, попробуйте следующее:
nrow(circle@lines[[1]]@Lines[[1]]@coords)
Результат:
[1] 1000
Это означает, что объект имеет 1000 координатных пар (x и y), через которые можно провести линию.Кроме того, эта линия будет иметь 999 различных отрезков, так как первая и последняя пары координат всегда идентичны.Пруф:
all.equal(circle@lines[[1]]@Lines[[1]]@coords[1, ],
circle@lines[[1]]@Lines[[1]]@coords[1000, ])
Результат:
[1] TRUE