2011-08-01 20 views
11

Al trazar histogarm, diagramas de dispersión y otras gráficas con ejes escalados a escala logarítmica en R, ¿cómo es posible utilizar etiquetas como 10^-1 10^0 10^1 10^2 10^3 y así sucesivamente en lugar de los ejes que muestran solo -1, 0, 1, 2, 3, etc. ¿Qué parámetros se deben agregar a los comandos como hist(), plot(), etc.?Etiquetado de visualización de escala logarítmica en R

+1

ggplot2 lo hace automáticamente si lo hace el registro transformación dentro de ggplot2. Vea los ejemplos al final de esta página: http://had.co.nz/ggplot2/geom_boxplot.html –

+0

Gracias, esto me ayudó. Además, encontré algo muy útil aquí también http://r.789695.n4.nabble.com/log-y-axis-of-histogram-td2399498.html – user744121

Respuesta

13

Además de la solución de ggplot2 (ver el comentario de GSK3), me gustaría añadir que esto se produce automáticamente en la parcela(), así cuando se utilizan los argumentos correctos, por ejemplo:

x <- 1:10 
y <- exp(1:10) 
plot(x,y,log="y") 

Usted puede utilizar el parámetro log="x" para el eje X, o log="xy" para ambos.

Si desea formatear los números, o tiene los datos en formato de registro, puede hacer una solución usando axis(). Algunas funciones interesantes:

  • axTicks(x) le da la ubicación de las garrapatas en el eje X (x = 1) o del eje Y (x = 2)
  • bquote() convierte expresiones al lenguaje, pero se puede sustituir una variable con su valor. Más información en bquote() en la pregunta Latex and variables in plot label in R?.
  • as.expression() hace que el objeto de idioma proveniente de bquote() sea una expresión. Esto permite que axis() haga el formateo como se explica en ?plotmath. No puede hacerlo con objetos de lenguaje.

Un ejemplo de buen formato:

x <- y <- 1:10 
plot(x,y,yaxt="n") 
aty <- axTicks(2) 
labels <- sapply(aty,function(i) 
      as.expression(bquote(10^ .(i))) 
     ) 
axis(2,at=aty,labels=labels) 

cual da

enter image description here

+0

Gracias, esto es bastante útil y creo que es un general solución. Funcionó bien para mí – user744121

+0

Este ejemplo me presentó a 'bquote()' - ¡gracias! – nullglob

+3

no se olvide 'par (las = 1)' para un mejor formateo ... –

1

En ggplot2 que sólo puede añadir un

... + 
scale_x_log10() + 
scale_y_log10(limits = c(1e-4,1), breaks=c(1e-4,1e-3,1e-2,0.1,1)) + ... 

para ajustar la escala del eje, Etiqueta ellos y agregar descansos personalizados .

9

Aquí es una manera diferente de dibujar este tipo de eje:

plot(NA, xlim=c(0,10), ylim=c(1, 10^4), xlab="x", ylab="y", log="y", yaxt="n") 
at.y <- outer(1:9, 10^(0:4)) 
lab.y <- ifelse(log10(at.y) %% 1 == 0, at.y, NA) 
axis(2, at=at.y, labels=lab.y, las=1) 

enter image description here

EDIT: Esto también se resuelve en latticeExtra con scale.components

Cuestiones relacionadas