使用ggplot2绘制未针对所有值定义的函数

时间:2016-09-26 17:26:28

标签: r 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。 有什么建议吗?

1 个答案:

答案 0 :(得分:3)

ylim(-3,3)导致该范围之外的数据值被从图中删除(这也发生在scale_y_continuous)。使用coord_cartesian设置限制,而不删除超出这些限制的数据:

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

在上面的代码中,我还设置了ylim范围,但是比图表的范围限制大得多。这是为了避免函数值爆炸到Inf-Inf的垂直线。