R中条形图的重心

时间:2017-08-04 08:13:31

标签: r geometry polygon centroid

假设你有一个矢量,并在R中制作它的条形图。你如何计算条形图的质心/ center of gravity

x<-cumsum(rnorm(50,1,2)) 
par(mfrow=c(1,2))
plot(x,type="l")
barplot(x)
par(mfrow=c(1,1))

关于polygon的重心,这里有很多答案,但是我不知道我需要哪些点来获得整个条形图的形状,而不仅仅是矢量与点(如左plot)。

2 个答案:

答案 0 :(得分:1)

每个栏的质心都在其几何中心,因此您可以使用&#34; A_system_of_particles&#34;。

M = Sum(Height[i])        for all i
cx = Sum(Height[i] * i) / M 
cy = Sum(Height[i] * Height[i] / 2) / M 

答案 1 :(得分:1)

您可以使用此功能轻松计算它

stdout

注意:每个条形的默认宽度为1.可以使用公式

计算两个条形的质心的x坐标

enter image description here

这同样适用于y坐标。这可以扩展到更多的条形。

enter image description here

由于我们没有完美的三角形,如果我们比较质心,总会出现错误。以高度差相同的条形为例,如

getCentroid <- function(x, width = 1) {
  A  <- x * width                  # area of each bar
  xc <- seq(width/2, length(x), 1) # x coordinates of center of bars
  yc <- x/2                        # y coordinatey

  cx <- sum(xc * A) / sum(A)
  cy <- sum(yc * A) / sum(A)
  return(list(x = cx, y = cy))
}
points(getCentroid(x), col = 'red', pch = 19)

(其中第一个条的高度为0)将始终在x坐标为1/6(2000/3与666.83333)之间产生错误。原因是缺少区域,因为我们没有完美的三角形。这个缺失区域等于0.5(考虑高度差并将其乘以条宽。将其与所有条形相加并将其除以2等于......)。