2010-10-29 8 views
21

Une façon de tracer la courbe correspondant à une fonction donnée est la suivante:Dessiner plus d'une courbe de fonction dans la même parcelle

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

Comment puis-je ajouter la courbe d'une autre fonction (par exemple fun2, qui est également défini par sa formule mathématique) dans le même complot?

+0

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

Répondre

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

Vérifiez aide également page pour curve.

+8

Notez que vous ne pouvez pas toujours utiliser le paramètre 'add': cela fonctionne ici parce que vous passez une fonction à tracer, mais si vous écrivez, par exemple,' plot (x, y, add = TRUE) 'vous allez juste obtenez un avertissement que 'add' n'est pas un paramètre graphique. – nico

+1

@nico Oui. C'est un cas très spécial cause 'plot' pour l'appel de fonction' curve'. C'est pourquoi toujours utiliser 'curve' pour tracer les fonctions. – Marek

8

Utilisez la fonction points. Il a la même syntaxe exacte que plot.

Ainsi, par exemple:

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

Notez que les paramètres de tracé comme ylim, xlim, titres et autres ne sont utilisés que dans le premier appel plot.

+2

pourquoi pas les lignes directement :) – VitoshKa

+0

Ouais, c'est une autre option . Cela dépend vraiment de ce que vous devez faire ... Il y a plusieurs façons d'accomplir cette tâche dans R. :) – nico

5

par l'aide()

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

J'utilise toujours le même paradigme. Vous voulez probablement une expression ylim = range (...) dans le premier plot, peut-être une couleur différente dans le second plot, jouer avec xlab et ylab, supprimer les axes si la mise à l'échelle ne se chevauche pas, etc. pp. solution générale. Ce que vous avez montré ne répond pas à la question posée :) –

22

En utilisant 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 est la meilleure réponse, car si vous commencez à ajouter des courbes, vous risquez de vous retrouver avec la zone de tracé actuelle. Matplot trie tout cela pour vous, et s'assure que les deux fonctions restent visibles. – Spacedman

+2

@Spacedman: et si vous ne connaissez pas les fonctions à l'avance? :) – nico

Questions connexes