web-dev-qa-db-fra.com

Changer l'espacement des graduations sur l'axe d'un tracé?

Comment puis-je modifier l'espacement des graduations sur l'axe d'un tracé?

Quels paramètres dois-je utiliser avec le tracé de base ou avec rgl?

73
skan

Il y a au moins deux façons de réaliser cela dans le graphique de base (mes exemples sont pour l'axe des x, mais fonctionnent de la même manière pour l'axe des y) :

  1. Utilisez par(xaxp = c(x1, x2, n)) ou plot(..., xaxp = c(x1, x2, n)) pour définir la position (x1 & x2) Des graduations extrêmes et le nombre d’intervalles entre ces repères ( n). En conséquence, n+1 Est le nombre de graduations dessinées. (Cela ne fonctionne que si vous n'utilisez pas d'échelle logarithmique, pour le comportement avec les échelles logarithmiques, voir ?par.)

  2. Vous pouvez supprimer complètement le dessin de l'axe et ajouter les repères plus tard avec axis().
    Pour supprimer le dessin de l'axe, utilisez plot(... , xaxt = "n").
    Puis appelez axis() avec side, at et labels: axis(side = 1, at = v1, labels = v2). Avec side faisant référence au côté de l'axe (1 = axe des x, 2 = axe des y), v1 Étant un vecteur contenant la position des graduations (par exemple, c(1, 3, 5) si votre axe est compris entre 0 et 6 et que vous souhaitez trois repères), et v2 un vecteur contenant les étiquettes des repères spécifiés (doit avoir la même longueur que v1, par exemple , c("group a", "group b", "group c")). Voir ?axis Et ma réponse mise à jour à un message sur stats.stackexchange pour un exemple de cette méthode .

89
Henrik

Avec les graphiques de base, le moyen le plus simple consiste à empêcher les fonctions de traçage de dessiner des axes, puis à les dessiner vous-même.

plot(1:10, 1:10, axes = FALSE)
axis(side = 1, at = c(1,5,10))
axis(side = 2, at = c(1,3,7,10))
box()
26
Gavin Simpson

J'ai un ensemble de données avec Time comme axe des x et Intensité comme axe des y. J'aurais d'abord besoin de supprimer tous les axes par défaut, à l'exception des étiquettes des axes, avec:

plot(Time,Intensity,axes=F)

Ensuite, je reconstruis les éléments de l'intrigue avec:

box() # create a wrap around the points plotted
axis(labels=NA,side=1,tck=-0.015,at=c(seq(from=0,to=1000,by=100))) # labels = NA prevents the creation of the numbers and tick marks, tck is how long the tick mark is.
axis(labels=NA,side=2,tck=-0.015)
axis(lwd=0,side=1,line=-0.4,at=c(seq(from=0,to=1000,by=100))) # lwd option sets the tick mark to 0 length because tck already takes care of the mark
axis(lwd=0,line=-0.4,side=2,las=1) # las changes the direction of the number labels to horizontal instead of vertical.

Ainsi, at = c(...) spécifie la collection de positions pour mettre les graduations. Ici, j'aimerais mettre les repères à 0, 100, 200, ..., 1000. seq(from =...,to =...,by =...) me donne le choix des limites et des incréments.

6
Huy Nguyen

Et si vous ne voulez pas que R ajoute des décimales ou des zéros, vous pouvez l'empêcher de dessiner l'axe des x ou des y ou les deux à l'aide de ... axt. Ensuite, vous pouvez ajouter vos propres ticks et labels:

plot(x, y, xaxt="n")
plot(x, y, yaxt="n")
axis(1 or 2, at=c(1, 5, 10), labels=c("First", "Second", "Third"))
3
javivr

Je viens de découvrir le package Hmisc :

Contient de nombreuses fonctions utiles pour l'analyse de données, les graphiques de haut niveau, les opérations utilitaires, les fonctions de calcul de la taille et de la puissance d'échantillon, l'importation et l'annotation de jeux de données, l'imputation de valeurs manquantes, la création de tableaux avancée, la mise en cluster de variables, la manipulation de chaînes de caractères, la conversion d'objets R en LaTeX. et code HTML, et recodage de variables.

library(Hmisc)    
plot(...)
minor.tick(nx=10, ny=10) # make minor tick marks (without labels) every 10th
2
Clem Wang