web-dev-qa-db-fra.com

Comment définir un rapport hauteur / largeur fixe pour un nuage de points

Je trace des coefficients de corrélation (valeurs = 0,0: 1,0) pour deux isotopes mesurés chez chaque individu de deux populations. Je voudrais avoir un rapport hauteur/largeur fixe pour mon nuage de points afin que les axes x et y soient exactement de la même taille, peu importe le périphérique graphique. Suggestions?

Ceci est mon premier tracé en R, des commentaires sur les améliorations de mon code sont appréciés? Enfin, cela vaut-il la peine d'investir dans l'apprentissage des techniques de base de traçage ou dois-je passer directement à ggplot2 ou treillis?

Mon script d'intrigue:

## Create dataset
WW_corr <-
structure(list(South_N15 = c(0.7976495, 0.1796725, 0.5338347,
0.4103769, 0.7447027, 0.5080296, 0.7566544, 0.7432026, 0.8927161
), South_C13 = c(0.76706752, 0.02320767, 0.88429902, 0.36648357,
0.73840937, 0.0523504, 0.52145159, 0.50707858, 0.51874445), North_N15 = c(0.7483608,
0.4294148, 0.9283554, 0.8831571, 0.5056481, 0.1945943, 0.8492716,
0.5759033, 0.7483608), North_C13 = c(0.08114805, 0.47268136,
0.94975596, 0.06023815, 0.33652839, 0.53055943, 0.30228833, 0.8864435,
0.08114805)), .Names = c("South_N15", "South_C13", "North_N15",
"North_C13"), row.names = c(NA, -9L), class = "data.frame")

opar <- par()

## Plot results
par(oma = c(1, 0, 0, 0), mar = c(4, 5, 2, 2))           
plot(1,1,xlim=c(0:1.0), ylim=c(0:1.0), type="n", las=1, bty="n", main = NULL,
     ylab=expression(paste("Correlation Coefficient (r) for ", delta ^{15},"N ",
                     "\u0028","\u2030","\u0029")),
     xlab=expression(paste("Correlation Coefficient (r) for ", delta ^{13},"C ",
                     "\u0028","\u2030","\u0029")))

points(WW_corr$South_N15, WW_corr$South_C13, pch = 23, cex = 1.25, 
       bg ="antiquewhite4", col = "antiquewhite4")
points(WW_corr$North_N15, WW_corr$North_C13, pch = 15, cex = 1.25,
       bg ="black")
axis(1, at = seq(0, 1.0, by = 0.1), labels = F, tick = TRUE, tck = -0.01)
axis(2, at = seq(0, 1.0, by = 0.1), labels = F, tick = TRUE, tck = -0.01)
abline(h=.86, v=.86, col = "gray60", lty = 2)
legend("topleft", c("North", "South"), pch = c(15, 23), 
       col = c("black", "antiquewhite4"), pt.bg = c("black", "antiquewhite4"),
       horiz=TRUE, bty = "n")

par(opar)
38
Keith W. Larson

L'utilisation de asp=1 Comme paramètre pour tracer sera interprétée par l'appel de bas niveau plot.window et devrait vous donner un rapport d'aspect unitaire. Il est possible qu'un appel utilisant ylim et xlim entre en conflit avec une spécification de rapport hauteur/largeur et que le asp devrait "prévaloir". C'est un premier graphique R très impressionnant, de loin. Et une excellente construction de question. Bonnes notes.

La seule note discordante était votre utilisation de la construction xlim=c(0:1.0). Puisque xlim attend un vecteur à deux éléments, je m'attendais à xlim = c (0,1). Moins de frappes et moins d'erreurs à l'avenir si vous passez à un autre ensemble de limites, car l'opérateur ":" vous donnerait des résultats inattendus si vous essayiez cela avec "0: 2.5".

42
42-
par(pty="s")
plot(...)

définit le type de tracé comme étant carré, ce qui fera le travail (je pense) dans votre cas car vos plages x et y sont les mêmes. Option assez bien cachée documentée au? Par.

43
Jonathan Burley