假设你有一个矢量,并在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)。
答案 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坐标这同样适用于y坐标。这可以扩展到更多的条形。
由于我们没有完美的三角形,如果我们比较质心,总会出现错误。以高度差相同的条形为例,如
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等于......)。