Je suis gêné de poser cette question simple, mais je me bouscule depuis plusieurs jours chaque fois que je crée un complot:
plot (x = 1:10, y = rnorm (10, 5, 2))
grid (10,10, lty = 6, col = "cornsilk2")
Je veux positionner les grilles juste à l'endroit où les axes sont étiquetés, c'est-à-dire à 2, 4, 6, 8, 10 dans l'axe x et de même 3, 4, 5, 6, 7, 8 dans l'axe y.
Je veux automatiser le processus chaque fois que la taille du tracé change, le comportement par défaut de l'étiquette change. Voir l'intrigue suivante:
De ?grid
description des arguments nx
et ny
:
Lorsque NULL, par défaut, la grille s'aligne avec les graduations sur l'axe par défaut correspondant (c'est-à-dire les graduations calculées par axTicks)
plot (x = 1:10, y = rnorm (10, 5, 2))
grid (NULL,NULL, lty = 6, col = "cornsilk2")
Pour référence, il existe un moyen de contrôler les paramètres de la grille et des axes directement à partir de la commande plot (), si nous ne définissons pas d'intervalle de tick personnalisé:
plot(x = 1:10, y = rnorm(10, 5, 2), xlim=c(1, 10), ylim=c(1, 10), panel.first=grid())
La documentation plot.default () donne plus d'informations sur ces paramètres.
Lorsque vous utilisez un intervalle de ticks personnalisé, le plus simple est de dessiner la grille à l'aide d'une abline:
plot(x = 1:10, y = rnorm(10, 5, 2), xaxp=c(1, 10, 10), yaxp=c(1, 10, 10), axes=FALSE)
axis(1, 1:10)
axis(2, 1:10)
abline(h=1:10, v=1:10, col="gray", lty=3)
Plus d'informations sur les intervalles de ticks personnalisés dans ce fil et ici pour l'alignement de la grille.
Pour la postérité, voici la manière longue de le faire manuellement:
plot (x = 1:10, y = rnorm (10, 5, 2))
grid (lty = 6, col = "cornsilk2")
xaxp <- par("xaxp")
yaxp <- par("yaxp")
abline(v=seq(xaxp[1], xaxp[2], (xaxp[2]-xaxp[1])/xaxp[3]), lty=6, col = "cornsilk2")
abline(h=seq(yaxp[1], yaxp[2], (yaxp[2]-yaxp[1])/yaxp[3]), lty=6, col = "cornsilk2")
La réponse fournie ici est beaucoup plus simple, bien que vous n'aimiez peut-être pas le manque "d'espace libre" à chaque extrémité des axes. En bref,
Le problème est que la grille place nx lignes de grille dans l'espace utilisateur, mais plot ajoute 4% d'espace supplémentaire de chaque côté. Vous pouvez en prendre le contrôle. Ajouter
xaxs="i", yaxs="i"
à votre tracé désactivera l'espace supplémentaire. Mais alors votre point supérieur droit sera coupé, vous devez donc changer les valeurs xlim et ylim et changer nx pour correspondre