2016-09-26 8 views
0

を持つすべての値に対して定義されていない関数をプロットこんにちは、私はこれらのような関数をプロットしています:はggplot2

eq <-function(x) ifelse(x<(-1)|x>1|(x>(-1)& x<1),(x/((x^2)-1)),NA) 
eq2 <-function(x) ifelse(x<(-sqrt(2))|x>sqrt(2)|x>(-sqrt(2))&x<sqrt(2),(x/((x^2)-2)), NA) 
eq3 <-function(x) ifelse(x<(-sqrt(3))|x>sqrt(3)|x>(-sqrt(3))&x<sqrt(3),(x/((x^2)-3)), NA) 

library(ggplot2) 
ggplot(data.frame(x=c(-3,3)), aes(x))+ 
    stat_function(fun=eq,geom="line", aes(colour="x/(x^2-1)"))+ 
    stat_function(fun=eq2,geom='line',aes(color='x/(x^2-2)')) + 
    stat_function(fun=eq3,geom='line', aes(color ='x/(x^2-3)'))+ 
    scale_x_continuous(breaks = (seq(-3, 3, by = 0.5)))+ ylim(-3,3) 

これは、プロットを作成しますが、行はランダムに停止しているように見えます。私は彼らにプロットの端を続けることを望みます。私のコードはこの質問Plotting Noncontinuous Function ggplot2の答えと同等であることは確かです。 提案がありますか?

+0

一点の不連続点については、ポイント上で等価性をチェックしただけでは、コードをもっときれいにすることができると思います。例えば 'ifelse(x == -1 | x == 1、NA、x /(x^2 - 1)) '。私はまた、 'stat_function'がポイントワイズの不連続点をハイライト表示するためにどれくらい適切であるのか疑問に思っています。正確な値' -1'と '1'が渡されない限り、不連続点は現れません。 – Gregor

+0

Thanks @ Gregor that much clean ! stat_functionの代替案の提案はありますか? –

+0

いいえ - 私はその点を後退させます。私は別の種類の機能/不連続を考えていました。 – Gregor

答えて

3

ylim(-3,3)は、その範囲外のデータ値がプロットから削除される原因となっています(scale_y_continuousでも発生します)。これらの範囲外のデータを削除せずに制限を設定するcoord_cartesianを使用:上記のコードで

ylim(-10,10) + 
    coord_cartesian(ylim=c(-3,3)) 

、私はまた、ylim範囲を設定するが、グラフの範囲の制限数のはるかに大きくてきました。これは、ファンクション値がInfまたは-Infになったときの縦線を避けるためです。

+0

これは素晴らしいことです。私は 'coord_cartesion(xlim =(-3,3))'を設定し、xを-5,5に設定しました;) –