2010-02-20 10 views
4

J'ai un grand ensemble de données que je trace en R, et j'aimerais avoir un axe de chaque côté du graphique montrant les données dans deux échelles différentes. Ainsi, par exemple, sur l'axe vertical gauche, je voudrais tracer les données directement (par exemple plot (y ~ x)) et sur l'axe droit, je voudrais avoir une mise à l'échelle linéaire de l'axe de gauche. .. (Par exemple parcelle (y * 20 ~ x)Tracer des axes avec différentes échelles pour un ensemble de données dans R

Donc, il n'y aurait qu'un seul ensemble de données affiché, mais les axes montreraient des significations différentes pour les points de données

J'ai essayé ce qui suit:

.
plot(x = dataset$x, y = dataset$y) 
axis(4, pretty(dataset$y,10)) 

cela correctement imprimer un nouvel axe de droite avec la même échelle que l'axe par défaut à gauche (essentiellement inutile, mais cela fonctionne) Cependant, si je fais ce petit changement:

plot(x = dataset$x, y = dataset$y) 
axis(4, pretty(10*dataset$y,10)) 

Soudainement, il refuse d'ajouter mon nouvel axe droit. Je soupçonne que cela a quelque chose à voir avec R voir si l'axe correspond à l'ensemble de données d'une manière ou d'une autre et le rejeter sinon. Comment puis-je faire en sorte que R ignore l'ensemble de données et imprime simplement un axe arbitraire de mon choix?

+0

Pourquoi ce wiki communautaire? – Shane

Répondre

3

R ne semble pas rejeter vos axes. Quelle erreur obtenez vous? Votre commande mettra des coches loin du graphique (puisqu'il utilise le premier axe pour les positionner). Ce que je pense que vous voulez est le suivant:

> plot(x = dataset$x, y = dataset$y) 
> axis(4, at = axTicks(2), label = axTicks(2) * 10) 
+0

Ceci est parfait, a résolu mon problème avec élégance. Mon problème n'était pas que les graduations étaient tracées incorrectement, c'était que j'avais besoin de les ré-étiqueter – deontologician

+1

Donc at = axTicks (2) signifie obtenir de nouveaux ticks d'axe du côté de la parcelle = 2; et label = axTicks (2) * 10 signifie créer des étiquettes à partir des graduations 'at' mises à l'échelle par 10. A droite? – philcolbourn

7

Ce que vous demandez, vous pouvez forcer ce n'est pas toujours pratique correcte, mais via par(new=TRUE):

x <- 1:20 
plot(x, log(x), type='l') 
par(new=TRUE)    # key: ask for new plot without erasing old 
plot(x, sqrt(x), type='l', col='red', xlab="", yaxt="n") 
axis(4) 

Le x-AXSIS est tracée deux fois, mais que vous avez les mêmes coordonnées x qui n'est pas problème . Le deuxième axe y est supprimé et tracé sur la droite. Mais les étiquettes vous montrent que vous êtes en train de mixer à différents niveaux.

+0

Vous pouvez également utiliser l'argument 'axes = F' dans le second appel à' plot() 'pour supprimer le double tracé de l'axe des x. – Sharpie