2010-10-29 13 views
21

Un modo per disegnare la curva corrispondente ad una determinata funzione è questo:creare più curve di funzione nella trama stessa

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

Come posso aggiungere curva di un'altra funzione (ad esempio fun2, che è anche definito da la sua formula matematica) nella stessa trama?

+0

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

risposta

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

controllare anche la pagina di aiuto per curve.

+8

Nota che non puoi sempre usare il parametro 'add': funziona qui perché stai passando una funzione per tracciare, ma se scrivi, per esempio,' trama (x, y, add = TRUE) 'ti basta ricevi un avvertimento che 'add' non è un parametro grafico. – nico

+1

@nico Sì. Questo è caso molto speciale causa 'trama' per la funzione chiamata' curva'. Ecco perché usa sempre 'curve' per tracciare le funzioni. – Marek

8

utilizzare la funzione points. Ha la stessa sintassi esatta come plot.

Così, per esempio:

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") 

notare che i parametri di trama come ylim, xlim, titoli e quali sono utilizzati solo dal primo plot chiamata.

+2

come su linee direttamente :) – VitoshKa

+0

Sì, è un'altra opzione . Dipende veramente quello che devi fare ... ci sono diversi modi di eseguire questa operazione in R. :) – nico

5

Attraverso il 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

io uso lo stesso paradigma per tutto il tempo. Probabilmente vuoi un'espressione ylim = range (...) nel primo grafico, forse un colore diverso nel secondo grafico, gioca con xlab e ylab, sopprime gli assi se il ridimensionamento non si sovrappone ecc. Pp. Almeno per un altro soluzione generale. Quello che hai mostrato risponde alla domanda posta :) –

22

Utilizzando 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 è la risposta migliore, dal momento che se inizi ad aggiungere curve potresti finire con loro andando fuori dall'area di stampa corrente. matplot ordina questo tutto per te e si assicura che entrambe le funzioni restino in vista. – Spacedman

+2

@Spacedman: cosa succede se non si conosce la funzione di anticipo? :) – nico

Problemi correlati