xlab legends math r graphics

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.