如何在不绘制库的情况下围绕 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).