0

我希望使用 ggradar 计算多边形的面积。

从我目前所做的研究来看,我认为目标是计算每个三角形的面积并将它们加在一起。由于我们知道质心到每个点的距离以及每个三角形两侧之间的角度,我们可以使用 side1 x side2 x sin(pi/n)/2 计算每个楔形的面积(其中 n = 变量数,在这种情况下为 4) 并将所有楔形加在一起。

以 mtcars 数据为例:

mtcars_radar <- mtcars %>% 
  as_tibble(rownames = "group") %>% 
  mutate_at(vars(-group), rescale) %>% 
  tail(1) %>% 
  select(1:5)

ggradar(mtcars_radar)+
  theme(legend.position='right')

使用 mtcars 的雷达图

那么我的问题是如何自动计算每个三角形的面积并将它们加在一起。关于如何做到这一点的任何建议?提前致谢。

4

1 回答 1

0

虽然我质疑该实用程序,但在 R 中当然可以做到这一点。这是这样一个函数

radar_area <- function(data) {
  vals <- data[, -1, drop=FALSE] # assume the first column is the ID
  first <- 1:ncol(vals)
  second <- c(first[-1], first[1])
  Reduce(`+`, Map(function(i, j) vals[,i] * vals[,j], first, second))/2 * sin(2*pi/ncol(vals))
}

radar_area(mtcars_radar)

我们将三角形的所有末端配对,然后将它们相乘,然后根据它们之间的角度进行添加和调整。这假设圆的中心位于 0,0,但在示例图中,如果雷达图似乎没有将 0 放在图像的确切中心。似乎有一个偏移量。如有必要,您可以将该偏移量的长度添加到三角形长度中。

于 2020-10-26T19:10:41.683 回答