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.
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é.
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.
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")
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:
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 treillis :
require(lattice)
x <- 1:100000
y <- 1:100000
xyplot(y~x, scales=list(x = list(log = 10)), type="l")
Le package R
graphics
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é.