2016-08-13 1 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))) 

Ich versuche, eine einzelne Handlung zu erzeugen, und dieser Code gibt mir die Handlung ich will, aber mit zwei zusätzlichen Stellplätzen, eine mit jedem geom_line. Ich verstehe nicht, warum diese zusätzlichen zwei Plots erstellt werden.Mehrere Kurven mit unterschiedlichen Domains in einem einzigen Grundstück (mit ggplot2)

+0

folgt es 2 Grund Plotten, weil die Funktion 'curve' Plots zieht, und Sie diese Funktion zweimal aufgerufen. – shayaa

Antwort

2

Wie @shayaa in den Kommentaren notiert, generiert curve selbst Plots, weshalb Sie die zusätzlichen Plots erhalten. Um dies zu vermeiden, können Sie einfach einen Datenrahmen, bevor Sie Plot erstellen, und Subset es in 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

oder 'transform (data.frame (x = seq (-6,6,0,01)), y = eq (x))' –

3

Neben meinen Kommentar oben, müssen Sie zwei nicht trennen Anrufe geom_line dieses Grundstück zu produzieren. Sie können stat_function verwenden, wenn Sie Ihre Funktion wie folgt neu definieren.

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

Dann können Sie es plotten als

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

enter image description here

+0

danke! Das ist schlau. Ich denke, ich muss es in zwei Teile zeichnen, weil ich Pfeile an den Enden beider Linien hinzufügen wollte (insgesamt 4). – Michael

Verwandte Themen