我希望使用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 的雷达图
因此,我的问题是如何自动计算每个三角形的面积,并将它们相加。有什么建议吗?提前谢谢。
当我质疑实用程序时,在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放在图像的确切中心。似乎有偏移。如果需要,可以将该偏移的长度添加到三角形长度中。