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

감사합니다 @Gregor가 훨씬 더 깨끗합니다 ! 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로 설정했다;) –