다음은 base
기능과 우리가 우리 자신을 정의하는 기능 몇 가지를 사용합니다.
세그먼트의 끝점 좌표를 계산할 필요가없는 방법을 요청했지만 이것이 불가능하다고 생각합니다. 그러나 몇 가지 기본 삼각법을 사용하여 각도 (y 축에서 시계 방향)와 세그먼트 길이를 계산하는 간단한 도우미 함수를 정의 할 수 있습니다. 회전 된 축을 그려주는 함수를 정의 할뿐만 아니라 아래에서이 작업을 수행합니다.
get.coords <- function(a, d, x0, y0) {
a <- ifelse(a <= 90, 90 - a, 450 - a)
data.frame(x = x0 + d * cos(a/180 * pi),
y = y0+ d * sin(a/180 * pi))
}
rotatedAxis <- function(x0, y0, a, d, symmetrical=FALSE, tickdist, ticklen, ...) {
if(isTRUE(symmetrical)) {
axends <- get.coords(c(a, a + 180), d, x0, y0)
tick.d <- c(seq(0, d, tickdist), seq(-tickdist, -d, -tickdist))
} else {
axends <- rbind(get.coords(a, d, x0, y0), c(x0, y0))
tick.d <- seq(0, d, tickdist)
}
invisible(lapply(apply(get.coords(a, d=tick.d, x0, y0), 1, function(x) {
get.coords(a + 90, c(-ticklen, ticklen), x[1], x[2])
}), function(x) lines(x$x, x$y, ...)))
lines(axends$x, axends$y, ...)
}
get.coords
인수 a
(각도 벡터) d
(세그먼트 길이의 벡터) 및 x0
및 y0
, 알려진 점의 좌표 걸린다. 벡터 a
및 d
은 필요에 따라 재활용됩니다. 이 함수는 각 각도/길이 쌍에 해당하는 좌표를 제공하는 x
및 y
요소가있는 data.frame
을 반환합니다.
rotatedAxis
은 축이 x0, y0
이고 점 d
단위가 각도 a
인 점을 그립니다. symmetrical
이 TRUE
인 경우 축은 반대 방향으로 d
단위까지 확장됩니다. 높이가 ticklen
인 눈금 표시는 tickdist
단위로 표시됩니다.
원을 그리는 것은 원을 따라 좌표를 계산하기 위해 get.coords
을 사용하고 이들을 연결하는 선을 polygon
(inspired by @timriffe)으로 표시합니다.
이하에서는 OP에서 제공하는 플롯을 복제하기 위해이 기능을 사용합니다.
# Set up plotting device
plot.new()
plot.window(xlim=c(-70, 70), ylim=c(-70, 70), asp=1)
# Plot circle with radius = 60 units and centre at the origin.
polygon(get.coords(seq(0, 360, length.out=1000), 60, 0, 0), lwd=2)
# Plot a polygon with vertices along six axes, at distances of 17, 34, 44, 40,
# 35, and 10 units from the centre.
poly.pts <- get.coords(seq(0, 300, 60), c(17, 34, 44, 40, 35, 10), 0, 0)
polygon(poly.pts$x, poly.pts$y, col='gray', lwd=2)
# Plot the rotated axes
rotatedAxis(0, 0, a=60, d=60, symmetrical=TRUE, tickdist=10, ticklen=1)
rotatedAxis(0, 0, a=120, d=60, symmetrical=TRUE, tickdist=10, ticklen=1)
rotatedAxis(0, 0, a=180, d=60, symmetrical=TRUE, tickdist=10, ticklen=1)
# Add text labels to circumference
text.coords <- get.coords(seq(0, 300, 60), 65, 0, 0)
text(text.coords$x, text.coords$y, c('I', 'A', 'S', 'E', 'C', 'R'))
# Plot a second point and connect to centre by a line
point2 <- get.coords(145, 50, 0, 0)
points(point2, pch=20, cex=2)
segments(0, 0, point2$x, point2$y, lwd=3)
# Plot central point
points(0, 0, pch=21, bg=1, col=0, lwd=2, cex=2)
(편집 :. 내가 많이이 게시물을 편집 - 변경하지 않고는 크게 일반 메시지입니다 - 순서대로 읽기 쉽고 더 일반적으로 적용하기 위해 추가는/변경은 지금 플롯하는 함수를 정의하는 것이 포함 회전 축, @timriffe 영감으로, 원주를 따라 정점의 좌표를 계산하고 polygon
와 플롯으로 원을 그릴.)
나는 그들이이라고 생각 ** 레이더 플롯 ** [스타 (참조 스파이더/레이더) 플롯 및 세그먼트 디그 램] (https://stat.ethz.ch/R-manual/R-devel/library/graphics/html/stars.html) – zx8754
[** plotrix **]에서'radial.plot'을보세요 (http://cran.r-project.org/web/packages/plotrix/index.html). – Thomas
적어도 더미 데이터를 제공하고 점과 선으로 플롯을 사용하여 직접 이동해야합니다. – Spacedman