web-dev-qa-db-fra.com

Je ne veux pas de notation scientifique sur l'axe de la parcelle

Je fais régulièrement toutes sortes de diagrammes de dispersion dans R en utilisant la commande plot.

Parfois, les deux, parfois un seul des axes de l'intrigue est étiqueté en notation scientifique. Je ne comprends pas quand R prend la décision de passer à la notation scientifique. De manière surprenante, il imprime souvent des nombres qu'aucun humain sensé n'écrirait de manière scientifique lors de l'étiquetage d'une parcelle, par exemple 5 (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é options(scipen=10) mais alors il commence à écrire 5,0 au lieu de 5, alors que sur l'autre axe 5 a encore 5 ans, etc.

J'utilise R 2.12.1 sur Windows 7.

61
user438602

Utilisez options(scipen=5) ou un autre nombre suffisamment élevé. L'option scipen détermine la probabilité de passage de R à la notation scientifique. Plus la valeur est élevée, moins il est probable qu'il bascule. Définissez l'option avant de créer votre tracé. S'il a toujours une notation scientifique, définissez-le sur un nombre plus élevé.

44
Greg Snow

Vous pouvez utiliser format ou formatC pour, ahem, formater vos étiquettes d'axe.

Pour des nombres entiers, essayez

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

Si les nombres sont convertibles en nombres entiers réels (c'est-à-dire pas trop gros), vous pouvez également utiliser

formatC(x, format = "d")

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

16
Richie Cotton

Essaye ça. J'ai volontairement cassé différentes parties pour que vous puissiez 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")

enter image description here

11
bill_080

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:

enter image description here

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))
11
Joris Meys

Vous pouvez essayer treillis :

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

enter image description here

4
Marek

Le package Rgraphics a la fonction axTicks qui renvoie les emplacements de ticks des ticks que les fonctions axis et plot définiraient automatiquement. Les autres réponses données à cette question définissent les emplacements de ticks manuellement, ce qui peut ne pas convenir 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 existe également un paramètre log dans la fonction axTicks, mais dans ce cas, il n’est pas nécessaire de le définir pour obtenir l’emplacement de tick de l’axe logarithmique approprié.

0
daniel.neumann