math - legends - No quiero notación científica en el eje de la trama
symbols in r (7)
Regularmente hago todo tipo de diagramas de dispersión en R usando el comando plot
.
A veces, ambos, a veces solo uno de los ejes de la trama está etiquetado en notación científica. No entiendo cuando R toma la decisión de cambiar a la notación científica. Sorprendentemente, a menudo imprime números que ningún humano en su sano juicio escribiría en notación científica al etiquetar un gráfico, por ejemplo, etiqueta 5 como 5e + 00. Digamos que tiene un eje de registro que va hasta 1000, la notación científica no está justificada con tales números "pequeños".
Me gustaría suprimir ese comportamiento, siempre quiero que R muestre valores enteros. es posible?
Intenté options(scipen=10)
pero luego comienza a escribir 5.0 en lugar de 5, mientras que en el otro eje 5 sigue siendo 5, etc. ¿Cómo puedo tener valores enteros puros en mis gráficos R?
Estoy usando R 2.12.1 en Windows 7.
El paquete de graphics
R
tiene la función axTicks
que devuelve las ubicaciones tic de los tics que las funciones de axis
y plot
establecerán automáticamente. Las otras respuestas dadas a esta pregunta definen las ubicaciones de ticks manualmente, lo que podría no ser conveniente en algunas situaciones.
myTicks = axTicks(1)
axis(1, at = myTicks, labels = formatC(myTicks, format = ''d''))
Un ejemplo mínimo sería
plot(10^(0:10), 0:10, log = ''x'', xaxt = ''n'')
myTicks = axTicks(1)
axis(1, at = myTicks, labels = formatC(myTicks, format = ''d''))
También hay un parámetro de log
en la función axTicks
, pero en esta situación no es necesario establecerlo para obtener la ubicación de tic del eje logarítmico apropiado.
Normalmente es suficiente establecer el límite del eje @ max de su variable
a <- c(0:1000000)
b <- c(0:1000000)
plot(a, b, ylim = c(0, max(b)))
Podrías probar el lattice :
require(lattice)
x <- 1:100000
y <- 1:100000
xyplot(y~x, scales=list(x = list(log = 10)), type="l")
Prueba esto. Exploté intencionalmente varias partes para que puedas mover las cosas.
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")
Puede usar format
o formatC
para, ejem, formatear las etiquetas de sus ejes.
Para números enteros, prueba
x <- 10 ^ (1:10)
format(x, scientific = FALSE)
formatC(x, digits = 0, format = "f")
Si los números son convertibles a enteros reales (es decir, no demasiado grandes), también puede usar
formatC(x, format = "d")
La forma de obtener las etiquetas en su eje depende del sistema de trazado que está utilizando.
Puede usar el comando axis()
para eso, por ejemplo:
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)
da :
EDITAR: si quiere tener todos ellos en el mismo formato, puede usar la solución de @Richie para obtenerlos:
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))
Use options(scipen=5)
o algún otro número lo suficientemente alto. La opción de scipen determina la probabilidad de que R cambie a la notación científica, cuanto mayor es el valor, menos probable es que cambie. Establezca la opción antes de hacer su trazado, si todavía tiene notación científica, configúrelo en un número más alto.