2010-10-29 18 views
21

taki sposób, aby wyciągnąć krzywą odpowiadającą danej funkcji jest to,Draw więcej niż jeden krzywe funkcyjnych w tej samej powierzchni

fun1 <- function(x) sin(cos(x)*exp(-x/2)) 
plot (fun1, -8, 5) 

Jak można dodać krzywą inną funkcję (np fun2, który również określa jego wzór matematyczny) na tym samym wykresie?

+0

Użyj plotFun {mozaika} http://rgm3.lab.nig.ac.jp/RGM/R_rdfile?f=mosaic/man/plotFun.Rd&d=R_CC –

Odpowiedz

24
plot (fun2, -8, 5, add=TRUE) 

Sprawdź również pomóc aktualizacja curve.

+8

Zauważ, że nie zawsze możesz użyć parametru 'add': działa tutaj, ponieważ przekazujesz funkcję do wydruku, ale jeśli napiszesz na przykład' plot (x, y, add = TRUE) 'będziesz po prostu otrzymasz ostrzeżenie, że 'add' nie jest parametrem graficznym. – nico

+1

@nico Tak. Jest to bardzo szczególny przypadek, który powoduje, że 'plot' dla funkcji wywołuje' krzywa'. Dlatego zawsze używaj 'krzywej' do rysowania funkcji. – Marek

8

Użyj funkcji points. Ma dokładnie taką samą składnię jak plot.

Tak więc, na przykład:

fun1 <- function(x) sin(cos(x)*exp(-x/2)) 

x <- seq(0, 2*pi, 0.01) 
plot (x, fun1(x), type="l", col="blue", ylim=c(-0.8, 0.8)) 
points (x, -fun1(x), type="l", col="red") 

pamiętać, że parametry takie jak ylim działka, xlim, tytuły i takie są stosowane dopiero od pierwszego plot rozmowy.

+2

jak o liniach bezpośrednio :) – VitoshKa

+0

Taa, to inna opcja . To naprawdę zależy od tego, co musisz zrobić ... jest kilka sposobów na wykonanie tego zadania w R. :) – nico

5

Korzystanie par()

fun1 <- function(x) sin(cos(x)*exp(-x/2)) 
fun2 <- function(x) sin(cos(x)*exp(-x/4)) 

plot(fun1, -8,5) 
par(new=TRUE) 
plot(fun2, -8,5) 
+1

Cały czas używam tego samego paradygmatu. Prawdopodobnie potrzebujesz wyrażenia ylim = range (...) na pierwszym wykresie, może inny kolor na drugim wykresie, baw się z xlab i ylab, pomiń osie, jeśli skalowanie nie nakłada się itd. Pp. Przynajmniej na więcej ogólne rozwiązanie. To, co pokazałeś, odpowiada na zadane pytanie :) –

22

Korzystanie matplot:

fun1<-function(x) sin(cos(x)*exp(-x/2)) 
fun2<-function(x) sin(cos(x)*exp(-x/4)) 
x<-seq(0,2*pi,0.01) 
matplot(x,cbind(fun1(x),fun2(x)),type="l",col=c("blue","red")) 
+6

matplot jest najlepszą odpowiedzią, ponieważ jeśli zaczniesz dodawać krzywe, możesz skończyć z nimi wychodząc z bieżącego obszaru wykresu. matplot sortuje to wszystko dla ciebie i zapewnia, że ​​obie funkcje pozostają widoczne. – Spacedman

+2

@Spacedman: co, jeśli nie znasz funkcji z góry? :) – nico

Powiązane problemy