Je voudrais tracer y1 et y2 dans le même tracé.
x <- seq(-2, 2, 0.05)
y1 <- pnorm(x)
y2 <- pnorm(x, 1, 1)
plot(x, y1, type = "l", col = "red")
plot(x, y2, type = "l", col = "green")
Mais quand je le fais comme ça, ils ne sont pas tracés ensemble dans le même tracé.
Dans Matlab, on peut le faire hold on
, mais quelqu'un sait-il comment faire cela dans R?
?curve
. Utilisezadd=TRUE
.Réponses:
lines()
oupoints()
s'ajoutera au graphique existant, mais ne créera pas de nouvelle fenêtre. Vous devez donc fairela source
plot(sin); curve(cos, add=TRUE)
.lines(x2,y2,...)
au lieu delines(x,y2,...)
Vous pouvez également utiliser
par
et tracer sur le même graphique mais sur un axe différent. Quelque chose comme suit:Si vous lisez en détail
par
dansR
, vous pourrez générer des graphiques vraiment intéressants. Un autre livre à regarder est R Graphics de Paul Murrel.la source
xlab="", ylab="", ...
et quelques autres dans le secondplot
.Lors de la construction de tracés multicouches, il faut tenir compte
ggplot
package. L'idée est de créer un objet graphique avec une esthétique de base et de l'améliorer progressivement.ggplot
le style nécessite que les données soient regroupéesdata.frame
.Solution basique:
Ici
+ operator
est utilisé pour ajouter des couches supplémentaires à l'objet de base.Avec
ggplot
vous avez accès à un objet graphique à chaque étape du traçage. Disons, la configuration étape par étape habituelle peut ressembler à ceci:g
produit l'intrigue, et vous pouvez le voir à chaque étape (enfin, après la création d'au moins une couche). D'autres enchantements de l'intrigue sont également réalisés avec l'objet créé. Par exemple, nous pouvons ajouter des étiquettes pour les axes:La finale
g
ressemble à:MISE À JOUR (2013-11-08):
Comme indiqué dans les commentaires,
ggplot
la philosophie de suggère d'utiliser des données au format long. Vous pouvez vous référer à cette réponse pour voir le code correspondant.la source
ggplot
cela le gère plus naturellement que le format "large" que vous utilisez.ggplot
la philosophie de ...Je pense que la réponse que vous cherchez est:
la source
"add" is not a graphical parameter
avertissement puis imprime simplement le deuxième tracé sur le premier."add" is not a graphical parameter
. Mon R estR version 3.2.3 (2015-12-10)
. Vous pouvez utiliser lapar(new=TRUE)
commande entre ces tracés.Utilisez la
matplot
fonction:utilisez-le si
y1
ety2
sont évalués aux mêmesx
points. Il met à l'échelle l'axe Y pour s'adapter à ce qui est le plus grand (y1
ouy2
), contrairement à certaines des autres réponses ici qui se couperonty2
si elle devient plus grande quey1
écrêtées (les solutions ggplot sont généralement d'accord avec cela).Alternativement, et si les deux lignes n'ont pas les mêmes coordonnées x, définissez les limites de l'axe sur le premier tracé et ajoutez:
Je suis étonné que ce Q ait 4 ans et que personne n'ait mentionné
matplot
oux/ylim
...la source
tl; dr: vous souhaitez utiliser
curve
(avecadd=TRUE
) oulines
.Je ne suis pas d'accord,
par(new=TRUE)
car cela double l'impression des graduations et des étiquettes d'axe. Par exempleLa sortie de
plot(sin); par(new=T); plot( function(x) x**2 )
.Regardez à quel point les étiquettes des axes verticaux sont en désordre! Étant donné que les plages sont différentes, vous devez définir
ylim=c(lowest point between the two functions, highest point between the two functions)
, ce qui est moins facile que ce que je vais vous montrer --- et beaucoup moins facile si vous voulez ajouter non seulement deux courbes, mais plusieurs.Ce qui m'a toujours dérouté dans le complot, c'est la différence entre
curve
etlines
. (Si vous ne vous souvenez pas que ce sont les noms des deux commandes de traçage importantes, chantez simplement -les.)Voici la grande différence entre
curve
etlines
.curve
tracera une fonction, commecurve(sin)
.lines
trace des points avec des valeurs x et y, comme:lines( x=0:10, y=sin(0:10) )
.Et voici une différence mineure:
curve
doit être appeléadd=TRUE
pour ce que vous essayez de faire, tout enlines
supposant déjà que vous ajoutez à un tracé existant.Voici le résultat de l'appel
plot(0:2); curve(sin)
.Dans les coulisses, consultez
methods(plot)
. Et vérifiezbody( plot.function )[[5]]
. Lorsque vous appelezplot(sin)
R, ilsin
s'agit d'une fonction (et non de valeurs y) et utilise laplot.function
méthode, qui finit par appelercurve
. Il encurve
va de même de l'outil destiné à gérer les fonctions.la source
si vous voulez diviser le tracé en deux colonnes (2 tracés côte à côte), vous pouvez le faire comme ceci:
Lien de référence
la source
Comme décrit par @redmode, vous pouvez tracer les deux lignes dans le même périphérique graphique en utilisant
ggplot
. Dans cette réponse, les données étaient dans un format «large». Cependant, lors de l'utilisation,ggplot
il est généralement plus pratique de conserver les données dans une trame de données dans un format «long». Ensuite, en utilisant différentes «variables de regroupement» dans leaes
arguments thétiques, les propriétés de la ligne, telles que le type de ligne ou la couleur, varieront en fonction de la variable de regroupement et les légendes correspondantes apparaîtront.Dans ce cas, nous pouvons utiliser l'
colour
esthétique, qui fait correspondre la couleur des lignes aux différents niveaux d'une variable dans l'ensemble de données (ici: y1 vs y2). Mais nous devons d'abord faire fondre les données du format large au format long, en utilisant par exemple la fonction «fondre» dureshape2
package. D'autres méthodes pour remodeler les données sont décrites ici: Remodelage de data.frame du format large au format long .la source
Si vous utilisez des graphiques de base (c'est-à-dire pas des graphiques en treillis / grille), vous pouvez imiter la fonction de maintien de MATLAB en utilisant les fonctions points / lignes / polygones pour ajouter des détails supplémentaires à vos tracés sans démarrer un nouveau tracé. Dans le cas d'une disposition multiplot, vous pouvez utiliser
par(mfg=...)
pour choisir le tracé auquel vous ajoutez des éléments.la source
Vous pouvez utiliser des points pour la superposition, c'est-à-dire.
la source
Plutôt que de conserver les valeurs à tracer dans un tableau, stockez-les dans une matrice. Par défaut, la matrice entière sera traitée comme un seul ensemble de données. Cependant, si vous ajoutez le même nombre de modificateurs au tracé, par exemple col (), que vous avez des lignes dans la matrice, R déterminera que chaque ligne doit être traitée indépendamment. Par exemple:
Cela devrait fonctionner à moins que vos ensembles de données soient de tailles différentes.
la source
Idlomatic Matlab
plot(x1,y1,x2,y2)
peut être traduit en R avecggplot2
par exemple de cette manière:Inspiré par les tracés à double ligne de Tingting Zhao avec différentes plages d'axes X à l'aide de ggplot2 .
la source
Vous pouvez utiliser la
ggplotly()
fonction du package plotly pour transformer l'un des exemples de gggplot2 ici en un tracé interactif, mais je pense que ce type de tracé est meilleur sans ggplot2 :la source
Vous pouvez également créer votre tracé à l'aide de ggvis :
Cela créera le tracé suivant:
la source
Utilisation
plotly
(ajout de solution à partirplotly
des axes y primaire et secondaire - Il semble manquer):Capture d'écran de la démonstration de travail:
la source
Error in library(plotly) : there is no package called ‘plotly’
pourquoi?plotly
? Vous devez installer le package à l'aide de lainstall.packages("plotly")
commande.nous pouvons également utiliser la bibliothèque de treillis
Pour des couleurs spécifiques
la source