Non voglio la notazione scientifica sull’asse della trama

Faccio regolarmente tutti i tipi di grafici a dispersione in R usando il comando plot .

A volte entrambi, a volte solo uno degli assi del plot è etichettato in notazione scientifica. Non capisco quando R prende la decisione di passare alla notazione scientifica. Sorprendentemente, stampa spesso numeri che nessun uomo sano di mente scriverebbe in notazione scientifica quando etichetta un grafico, ad esempio etichetta 5 come 5e + 00. Supponiamo che tu abbia un asse log fino a 1000, la notazione scientifica non è giustificata con numeri “piccoli”.

Vorrei sopprimere questo comportamento, voglio sempre che R mostri i valori interi. È ansible?

Ho provato le options(scipen=10) ma poi inizia a scrivere 5.0 anziché 5, mentre sull’altro 5 è ancora 5 ecc. Come posso avere valori interi puri nei miei grafici R?

Sto usando R 2.12.1 su Windows 7.

Usa le options(scipen=5) o qualche altro numero abbastanza alto. L’opzione scipen determina la probabilità che R passi alla notazione scientifica, maggiore è il valore e minore è la probabilità di passare. Impostare l’opzione prima di creare il grafico, se ha ancora la notazione scientifica, impostarlo su un numero più alto.

È ansible utilizzare il format o il formatC per, ahem, formattare le etichette degli assi.

Per numeri interi, prova

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

Se i numeri sono convertibili in interi effettivi (cioè non troppo grandi), puoi anche usarli

 formatC(x, format = "d") 

Il modo in cui ottieni le etichette sul tuo asse dipende dal sistema di tracciamento che stai utilizzando.

Prova questo. Ho intenzionalmente scomposto varie parti in modo da poter spostare le cose.

 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") 

inserisci la descrizione dell'immagine qui

È ansible utilizzare il comando axis() per questo, ad esempio:

 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) 

dà:

inserisci la descrizione dell'immagine qui

EDIT: se vuoi averli tutti nello stesso formato, puoi usare la soluzione di @Richie per ottenerli:

 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)) 

Potresti provare reticolo :

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

inserisci la descrizione dell'immagine qui

Normalmente il limite dell’asse @ max della variabile è sufficiente

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

Il pacchetto di graphics R ha la funzione axTicks che restituisce le posizioni di spunta dei tick che le funzioni di axis e plot sarebbero impostate automaticamente. Le altre risposte fornite a questa domanda definiscono manualmente le posizioni dei tick che potrebbero non essere convenienti in alcune situazioni.

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

Un esempio minimo sarebbe

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

Esiste anche un parametro log nella funzione axTicks ma in questa situazione non è necessario impostarlo per ottenere la corretta posizione di spunta dell’asse logaritmico.