2016-08-13 14 views
0
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で1と。なぜ私はそれらの追加の2つのプロットが作成されているのか分かりません。複数曲線の

+0

を次のように次に、あなたがそれをプロットすることができます。 – shayaa

答えて

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)) 
+1

または 'transform(data.frame(x = seq(-6,6,0.01))、y = eq(x))' –

3

上記の私のコメントに加えて、あなたはこのプロットを生成するためにgeom_lineへの2回の別々の呼び出しを必要としません。関数を次のように再定義すると、stat_functionを使用できます。

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

関数 `curve`は、プロットを描画し、あなたが二回この関数を呼び出したので、それが2つのプロットをプロットしている

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

enter image description here

+0

ありがとう!それは賢いです。私は両方の行の最後に矢印を追加したいので(合計4行)、2つの部分で描画する必要があると思います。 – Michael