2016-07-28 5 views
1

に垂直線を追加したい場合は、線のx軸の位置を曲線の傾向に従って決定します。具体的には、曲線が平坦になるx軸の位置、つまり最後の変曲点を探しています。説明するためにデータに基づいてgeom_freqpolyプロットに垂直線を追加する

library(ggplot2) 
ggplot(data=diamonds, aes(carat))+geom_freqpoly(binwidth = 0.1) 

はこのプロットを与える: enter image description here

私が取得するために、X =〜2.5 enter image description hereで縦線を追加したい:

だから私の質問が行う方法です私はx軸の位置を決定するこの最後の変曲点を見つけるのですか?

+0

変曲点は2ではありませんか?あなたの解釈はまた、それが最後の最も高い数字であるので変曲点であると主張することもできます。 – Vedda

答えて

1

興味深い質問です。私がこれについて正確に考えているなら、一定の許容差を持った最後の点、例えば26を探しています。これはちょっとしたハックかもしれませんが、うまくいくでしょうし、データのために修正することができます。

ggplotセットアップ

library(ggplot2) 
b <- ggplot(data=diamonds, aes(carat)) + geom_freqpoly(binwidth = 0.1) 

変曲点機能

は、この機能の点は以前から所定の許容差で、上記で定義されggplotモデルから「変曲点」を返すことですデータポイント - > 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ラインと新しいggplot:寛容26と最後

ggplot(data=diamonds, aes(carat)) + 
    geom_freqpoly(binwidth = 0.1) + 
    geom_vline(xintercept = get_infl(b, 26, 1), color = "red") 

enter image description here

Vライン

新しいggplot:最後

から第寛容26と
ggplot(data=diamonds, aes(carat)) + 
    geom_freqpoly(binwidth = 0.1) + 
    geom_vline(xintercept = get_infl(b, 26, 2), color = "red") 

enter image description here

関連する問題