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")
È 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à:
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")
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.