如何在不绘制库的情况下围绕 polygon/spider 图表绘制圆圈
How to draw circles around polygon/spider chart, without plotting libraries
如果不使用 ggplot2
或其他绘图库,我需要围绕 polygon/star 图表顶点绘制圆圈,即每个圆圈的半径等于相应的多边形半径。你可以在这里看到一个例子:
d1 <- 1:4
names(d1) <- LETTERS[1:4]
stars(matrix(d1,nrow=1),axes=TRUE, scale=FALSE,radius=TRUE, frame.plot=TRUE,labels = dimnames(d1)[[1]])
grid()[enter image description here][1]
我知道我应该将 stars()
与 symbols()
、polygon()
函数或 par(...)
图形结合起来,但老实说,我对这些绘图技术不熟悉并且对如何组合函数和参数非常迷茫
我不知道 base R 中有什么函数可以为你画圆,但你可以手动编造它们。
center <- c(x=2.1, y=2.1) # probably a better way
half <- seq(0, pi, length.out = 51)
for (D in d1) {
Xs <- D * cos(half); Ys <- D * sin(half)
lines(center["x"] + Xs, center["y"] + Ys, col = "gray", xpd = NA)
lines(center["x"] + Xs, center["y"] - Ys, col = "gray", xpd = NA)
}
备注:
- 我不知道应该如何计算中心点,我使用
locator(1)
选择了那个点;不熟悉 stars
,可能有更好的方法以编程方式更准确地确定这一点;
- 第一个
lines(.)
画上半圆;第二个绘制较低。
xpd=NA
是为了防止由于绘图边距而导致的裁剪。在您的“真实”数据中可能没有必要。有关详细信息,请参阅 ?par
。
- 虽然这里可能很难检测到,但灰色圆圈是绘制在 星图之上 ,这可能是一种美学上的妥协。解决这个问题的唯一方法是绘制圆 first。为此,首先用
plot(..., type="l")
绘制第一个半圆,然后按预期添加余数,然后才 运行 stars(..., add=TRUE)
.
如果不使用 ggplot2
或其他绘图库,我需要围绕 polygon/star 图表顶点绘制圆圈,即每个圆圈的半径等于相应的多边形半径。你可以在这里看到一个例子:
d1 <- 1:4
names(d1) <- LETTERS[1:4]
stars(matrix(d1,nrow=1),axes=TRUE, scale=FALSE,radius=TRUE, frame.plot=TRUE,labels = dimnames(d1)[[1]])
grid()[enter image description here][1]
我知道我应该将 stars()
与 symbols()
、polygon()
函数或 par(...)
图形结合起来,但老实说,我对这些绘图技术不熟悉并且对如何组合函数和参数非常迷茫
我不知道 base R 中有什么函数可以为你画圆,但你可以手动编造它们。
center <- c(x=2.1, y=2.1) # probably a better way
half <- seq(0, pi, length.out = 51)
for (D in d1) {
Xs <- D * cos(half); Ys <- D * sin(half)
lines(center["x"] + Xs, center["y"] + Ys, col = "gray", xpd = NA)
lines(center["x"] + Xs, center["y"] - Ys, col = "gray", xpd = NA)
}
备注:
- 我不知道应该如何计算中心点,我使用
locator(1)
选择了那个点;不熟悉stars
,可能有更好的方法以编程方式更准确地确定这一点; - 第一个
lines(.)
画上半圆;第二个绘制较低。 xpd=NA
是为了防止由于绘图边距而导致的裁剪。在您的“真实”数据中可能没有必要。有关详细信息,请参阅?par
。- 虽然这里可能很难检测到,但灰色圆圈是绘制在 星图之上 ,这可能是一种美学上的妥协。解决这个问题的唯一方法是绘制圆 first。为此,首先用
plot(..., type="l")
绘制第一个半圆,然后按预期添加余数,然后才 运行stars(..., add=TRUE)
.