找到具有多个交点的两个图形之间的公共区域
Find the common area between two graphs with multiple intersection points
我有以下两个变量的模拟数据。我创建了如下密度图,
set.seed(1)
x1=density(rnorm(100,0.5,3))
x2=density(rnorm(100,1,3))
plot(x1)
lines(x2)
是否有任何函数可以使用 R 找到这两个图的公共区域?
是否需要对交点进行积分?
谢谢
如果将两个密度用于 x 值的序列设置为相同,则可以对 y 值使用 pmin
。 (调用 str(x1)
查看它们的存储方式。)例如,查看其工作原理:
set.seed(1)
x1 <- density(rnorm(100,0.5,3), from = -10, to = 10, n = 501)
x2 <- density(rnorm(100,1,3), from = -10, to = 10, n = 501)
plot(x2, main = 'Density intersection')
lines(x1)
polygon(x1$x, pmin(x1$y, x2$y), 20, col = 'dodgerblue')
取积分意味着只需将每个 pmin
乘以 x 序列中的增量并求和:
sum(pmin(x1$y, x2$y) * diff(x1$x[1:2]))
#> [1] 0.896468
我有以下两个变量的模拟数据。我创建了如下密度图,
set.seed(1)
x1=density(rnorm(100,0.5,3))
x2=density(rnorm(100,1,3))
plot(x1)
lines(x2)
是否有任何函数可以使用 R 找到这两个图的公共区域?
是否需要对交点进行积分?
谢谢
如果将两个密度用于 x 值的序列设置为相同,则可以对 y 值使用 pmin
。 (调用 str(x1)
查看它们的存储方式。)例如,查看其工作原理:
set.seed(1)
x1 <- density(rnorm(100,0.5,3), from = -10, to = 10, n = 501)
x2 <- density(rnorm(100,1,3), from = -10, to = 10, n = 501)
plot(x2, main = 'Density intersection')
lines(x1)
polygon(x1$x, pmin(x1$y, x2$y), 20, col = 'dodgerblue')
取积分意味着只需将每个 pmin
乘以 x 序列中的增量并求和:
sum(pmin(x1$y, x2$y) * diff(x1$x[1:2]))
#> [1] 0.896468