我想在geom_freqpoly
添加垂直线,其中线的x轴位置将根据曲线的趋势确定。具体来说,我正在寻找曲线变平的x轴位置 - 最后一个拐点。
举例说明:
library(ggplot2)
ggplot(data=diamonds, aes(carat))+geom_freqpoly(binwidth = 0.1)
所以我的问题是如何找到确定x轴位置的最后一个拐点?
答案 0 :(得分:1)
有趣的问题。如果我正确地考虑这个问题,那么你正在寻找具有一定容忍度的最后一点 - 比方说26。这可能有点像黑客攻击,但它会起作用,你可以根据你的数据进行修改。
ggplot setup
library(ggplot2)
b <- ggplot(data=diamonds, aes(carat)) + geom_freqpoly(binwidth = 0.1)
拐点功能
此功能的目的是返回&#34;拐点&#34;来自上面定义的ggplot模型,具有来自先前数据点的给定容差 - 例如&gt; = 26 - 以及来自拐点向量的所需最后数字。
get_infl <- function(ggplot_model, tolerance, last){
bg <- ggplot_build(ggplot_model)
dat <- bg$data[[1]]
y <- dat$y
x <- dat$x
loc <- tail(which(diff(y)>=tolerance),10)+1L
newloc <- loc[[length(loc) - last + 1]]
return(x[[newloc]])
}
带有V-line的新ggplot :容差26和最后
ggplot(data=diamonds, aes(carat)) +
geom_freqpoly(binwidth = 0.1) +
geom_vline(xintercept = get_infl(b, 26, 1), color = "red")
带有V-line的新ggplot :公差26,距离最后一秒
ggplot(data=diamonds, aes(carat)) +
geom_freqpoly(binwidth = 0.1) +
geom_vline(xintercept = get_infl(b, 26, 2), color = "red")