单个图中具有不同域的多个曲线(使用ggplot2)

时间:2016-08-13 01:17:23

标签: r ggplot2

library("ggplot2")
eq = function(x){x^-1}
ggplot(data.frame(x=c(-6,6)), aes(x = x, y=eq(x)))+
    geom_line(data=as.data.frame(curve(from=-6, to=-.01, eq)))+
    geom_line(data=as.data.frame(curve(from=.01, to=6, eq)))

我正在尝试制作一个单独的情节,这段代码给了我想要的情节,但是有两个额外的情节,一个有每个geom_line。我不明白为什么要创建另外两个地块。

2 个答案:

答案 0 :(得分:3)

除了上面的评论之外,您不需要两次单独调用geom_line来生成此图。如果您按照以下方式重新定义功能,则可以使用stat_function

eq <- function(x) ifelse(x==0, NA,x^-1)

然后你可以按如下方式绘制

df <- data.frame(x=seq(-6,6,.01))
ggplot(df) + stat_function(aes(x), fun = eq)

enter image description here

答案 1 :(得分:2)

正如@shayaa在评论中指出的那样,curve本身会产生情节,这就是为什么你会得到额外的情节。为了避免这种情况,您可以在绘制之前创建一个数据框,并将其在geom_line

中进行子集化
library("ggplot2")
eq = function(x){x^-1}
df <- data.frame(x =seq(-6, 6, 0.01), y = eq(seq(-6, 6, 0.01)))
ggplot(df) +
  geom_line(data=subset(df, x<=-.01), aes(x = x, y = y)) +
  geom_line(data=subset(df, x>=.01), aes(x = x, y = y))