Je ne veux pas de notation scientifique sur l’axe de la plot

Je fais régulièrement toutes sortes de nuages ​​de points en R en utilisant la commande plot .

Parfois, les deux, parfois un seul des axes du tracé est marqué en notation scientifique. Je ne comprends pas quand R prend la décision de passer à la notation scientifique. Étonnamment, il imprime souvent des nombres qu’aucun humain sensé n’écrirait en notation scientifique lors de l’étiquetage d’un tracé, par exemple, il marque 5 comme 5e + 00. Disons que vous avez un axe de log allant jusqu’à 1000, la notation scientifique est injustifiée avec de tels “petits” nombres.

Je voudrais supprimer ce comportement, je veux toujours que R affiche des valeurs entières. Est-ce possible?

J’ai essayé des options(scipen=10) mais ensuite il commence à écrire 5.0 au lieu de 5, tandis que sur l’autre axe 5 est toujours 5 etc. Comment puis-je avoir des valeurs entières pures dans mes diagrammes R?

J’utilise R 2.12.1 sur Windows 7.

Utilisez les options(scipen=5) ou un autre nombre suffisamment élevé. L’option scipen détermine la probabilité que R bascule vers une notation scientifique, plus la valeur est élevée, moins il y a de chances de basculer. Définissez l’option avant de faire votre tracé, s’il a encore une notation scientifique, réglez-le sur un nombre plus élevé.

Vous pouvez utiliser le format ou le format formatC pour formater vos étiquettes d’axes.

Pour les nombres entiers, essayez

 x <- 10 ^ (1:10) format(x, scientific = FALSE) formatC(x, digits = 0, format = "f") 

Si les nombres peuvent être convertis en nombres entiers réels (c.-à-d. Pas trop grands), vous pouvez également utiliser

 formatC(x, format = "d") 

La manière dont les étiquettes sont placées sur votre axe dépend du système de traçage que vous utilisez.

Essaye ça. J’ai délibérément brisé différentes parties pour pouvoir déplacer les choses.

 library(sfsmisc) #Generate the data x <- 1:100000 y <- 1:100000 #Setup the plot area par(pty="m", plt=c(0.1, 1, 0.1, 1), omd=c(0.1,0.9,0.1,0.9)) #Plot a blank graph without completing the x or y axis plot(x, y, type = "n", xaxt = "n", yaxt="n", xlab="", ylab="", log = "x", col="blue") mtext(side=3, text="Test Plot", line=1.2, cex=1.5) #Complete the x axis eaxis(1, padj=-0.5, cex.axis=0.8) mtext(side=1, text="x", line=2.5) #Complete the y axis and add the grid aty <- seq(par("yaxp")[1], par("yaxp")[2], (par("yaxp")[2] - par("yaxp")[1])/par("yaxp")[3]) axis(2, at=aty, labels=format(aty, scientific=FALSE), hadj=0.9, cex.axis=0.8, las=2) mtext(side=2, text="y", line=4.5) grid() #Add the line last so it will be on top of the grid lines(x, y, col="blue") 

entrer la description de l'image ici

Vous pouvez utiliser la commande axis() pour cela, par exemple:

 x <- 1:100000 y <- 1:100000 marks <- c(0,20000,40000,60000,80000,100000) plot(x,y,log="x",yaxt="n",type="l") axis(2,at=marks,labels=marks) 

donne:

entrer la description de l'image ici

EDIT: si vous voulez tous les avoir dans le même format, vous pouvez utiliser la solution de @Richie pour les obtenir:

 x <- 1:100000 y <- 1:100000 format(y,scientific=FALSE) plot(x,y,log="x",yaxt="n",type="l") axis(2,at=marks,labels=format(marks,scientific=FALSE)) 

Vous pouvez essayer le treillis :

 require(lattice) x <- 1:100000 y <- 1:100000 xyplot(y~x, scales=list(x = list(log = 10)), type="l") 

entrer la description de l'image ici

Normalement, définir la limite d’axe @ max de votre variable suffit

 a <- c(0:1000000) b <- c(0:1000000) plot(a, b, ylim = c(0, max(b))) 

Le package graphics R a la fonction axTicks qui renvoie les emplacements des ticks que les fonctions de l’ axis et du plot définiraient automatiquement. Les autres réponses données à cette question définissent les emplacements des ticks manuellement, ce qui peut ne pas être pratique dans certaines situations.

 myTicks = axTicks(1) axis(1, at = myTicks, labels = formatC(myTicks, format = 'd')) 

Un exemple minimal serait

 plot(10^(0:10), 0:10, log = 'x', xaxt = 'n') myTicks = axTicks(1) axis(1, at = myTicks, labels = formatC(myTicks, format = 'd')) 

Il y a aussi un paramètre de log dans la fonction axTicks mais dans cette situation, il n’est pas nécessaire de le définir pour obtenir l’emplacement correct de l’axe logarithmique.