如何计算ggradar中多边形的面积
how to calculate area of polygon in ggradar
我希望使用 ggradar 计算多边形的面积。
根据我目前所做的研究,我认为目标是计算每个三角形的面积并将它们加在一起。由于我们知道从质心到每个点的距离以及每个三角形两侧之间的角度,我们可以使用 side1 x side2 x sin(pi/n)/2 计算每个楔形的面积(其中 n = number变量,在本例中为 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')
radar chart using 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 放在图像的确切中心。似乎有抵消。如有必要,您可以将该偏移量的长度添加到三角形长度中。
我希望使用 ggradar 计算多边形的面积。
根据我目前所做的研究,我认为目标是计算每个三角形的面积并将它们加在一起。由于我们知道从质心到每个点的距离以及每个三角形两侧之间的角度,我们可以使用 side1 x side2 x sin(pi/n)/2 计算每个楔形的面积(其中 n = number变量,在本例中为 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')
radar chart using 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 放在图像的确切中心。似乎有抵消。如有必要,您可以将该偏移量的长度添加到三角形长度中。