Je voudrais superposer deux nuages de points dans R afin que chaque ensemble de points ait son propre axe y (différent) (c'est-à-dire aux positions 2 et 4 sur la figure) mais les points apparaissent superposés sur la même figure.
Est-il possible de faire ça avec plot
?
Modifier l' exemple de code montrant le problème
# example code for SO question
y1 <- rnorm(10, 100, 20)
y2 <- rnorm(10, 1, 1)
x <- 1:10
# in this plot y2 is plotted on what is clearly an inappropriate scale
plot(y1 ~ x, ylim = c(-1, 150))
points(y2 ~ x, pch = 2)
ggplot2
: stackoverflow.com/questions/3099219/… (recherche SO pour[r] two y-axes
ou[r] twoord.plot
) - il y a quelques autres réponses connexes, bien que (à ma grande surprise car c'est une FAQ R) rien d'Réponses:
mise à jour : matériel copié qui était sur le wiki R à http://rwiki.sciviews.org/doku.php?id=tips:graphics-base:2yaxes , lien maintenant cassé: également disponible sur la machine de retour
Deux axes y différents sur le même tracé
(certains documents à l'origine par Daniel Rajdl 2006/03/31 15:26)
Veuillez noter qu'il existe très peu de situations où il est approprié d'utiliser deux échelles différentes sur le même graphique. Il est très facile de tromper le spectateur du graphique. Consultez les deux exemples et commentaires suivants sur ce problème ( exemple1 , exemple2 de Junk Charts ), ainsi que cet article de Stephen Few (qui conclut: «Je ne peux certainement pas conclure, une fois pour toutes, que les graphiques avec des axes à double échelle ne sont jamais utile; seulement que je ne peux pas penser à une situation qui les justifie à la lumière d'autres solutions meilleures. ») Voir également le point 4 de cette caricature ...
Si vous êtes déterminé, la recette de base est de créer votre premier tracé, défini
par(new=TRUE)
pour empêcher R d'effacer le périphérique graphique, de créer le deuxième tracé avecaxes=FALSE
(et de définirxlab
etylab
d'être vide -ann=FALSE
devrait également fonctionner), puis d'utiliseraxis(side=4)
pour ajouter un nouvel axe sur le côté droit etmtext(...,side=4)
pour ajouter une étiquette d'axe sur le côté droit. Voici un exemple utilisant un peu de données inventées:twoord.plot()
dans leplotrix
package automatise ce processus, comme le faitdoubleYScale()
dans lelatticeExtra
package.Un autre exemple (adapté d'un article de liste de diffusion R par Robert W. Baer):
Des recettes similaires peuvent être utilisées pour superposer des graphiques de types différents - graphiques à barres, histogrammes, etc.
la source
axis(1,pretty(range(time),10))
ligne?Comme son nom l'indique,
twoord.plot()
dans le package plotrix , des tracés avec deux axes ordonnés .la source
Une option consiste à créer deux parcelles côte à côte.
ggplot2
fournit une belle option pour cela avecfacet_wrap()
:la source
Si vous pouvez abandonner les échelles / étiquettes d'axe, vous pouvez redimensionner les données à (0, 1) intervalle. Cela fonctionne par exemple pour différents trakcs «wiggle» sur les chromosomes, lorsque vous êtes généralement intéressé par les corrélations locales entre les pistes et qu'elles ont des échelles différentes (couverture en milliers, Fst 0-1).
Ensuite, ayant une trame de données avec
chrom
,position
,coverage
etfst
colonnes, vous pouvez faire quelque chose comme:L'avantage de ceci est que vous n'êtes pas limité à deux trakcs.
la source
Je suggère aussi,
twoord.stackplot()
dans lesplotrix
parcelles de package avec plus de deux axes ordonnés.la source
Une autre alternative qui est similaire à la réponse acceptée par @BenBolker consiste à redéfinir les coordonnées du tracé existant lors de l'ajout d'un deuxième ensemble de points.
Voici un exemple minimal.
Les données:
Terrain:
la source