我有两个1000个值的向量(a和b),从中我创建了密度图和直方图。我想检索两个图相交处的坐标(或仅y值)(如果它检测到多个相交无关紧要,那么我以后可以区分它们)。请在以下链接中找到数据。 Sample Data
xlim = c(min(c(a,b)), max(c(a,b)))
hist(a, breaks = 100,
freq = F,
xlim = xlim,
xlab = 'Test Subject',
main = 'Difference plots',
col = rgb(0.443137, 0.776471, 0.443137, 0.5),
border = rgb(0.443137, 0.776471, 0.443137, 0.5))
lines(density(a))
hist(b, breaks = 100,
freq = F,
col = rgb(0.529412, 0.807843, 0.921569, 0.5),
border = rgb(0.529412, 0.807843, 0.921569, 0.5),
add = T)
lines(density(b))
使用 locate()并不是最佳方法,因为我需要从多个绘图中进行检索(但如果没有其他可行的方法,将使用该方法)。感谢您的帮助。
答案 0 :(得分:1)
我们计算两个系列的密度曲线,并注意使用相同的范围。然后,我们比较在每个x值处a
的y值是否大于b
。当比较的结果发生翻转时,我们知道界限已经交叉。
df <- merge(
as.data.frame(density(a, from = xlim[1], to = xlim[2])[c("x", "y")]),
as.data.frame(density(b, from = xlim[1], to = xlim[2])[c("x", "y")]),
by = "x", suffixes = c(".a", ".b")
)
df$comp <- as.numeric(df$y.a > df$y.b)
df$cross <- c(NA, diff(df$comp))
points(df[which(df$cross != 0), c("x", "y.a")])
给你