2012-02-10 15 views
19

Tengo una serie temporal de datos donde las medidas son todas enteros entre 1e6 y 1e8: visitas al sitio web por mes. Quiero usar ggplot2 para trazar estos con puntos y líneas, pero mapeando las mediciones a una escala de registro. Algo como esto:¿Cómo puedo establecer los rangos de los ejes en ggplot2 cuando uso una escala de registro?

qplot(month, hits, data=hits.per.month, log="y") 

Cuando hago eso, parece ggplot para establecer la escala de 1E6 a 1E8. Quiero que se escale de 0 a 1e8. La forma natural de hacer esto parece no tener ningún efecto en la salida:

qplot(month, hits, data=hits.per.month, log="y", ylim=c(0, 100000000)) 

puedo conseguir la imagen que deseo mediante la transformación de golpes antes de que llegue qplot, pero que cambia las etiquetas en el eje:

qplot(month, log10(hits), data=hits.per.month, log="y", ylim=c(0, 8)) 

También probé varias combinaciones con scale_y_log10, pero no tuve suerte.

Entonces, ¿cómo configuro el rango del eje Y cuando uso una escala de registro en ggplot2?

Respuesta

25

Gran parte de ggplot2 es más claro para mí si no se usa qplot. De esa manera no se metiendo todo en una sola llamada de función:

df <- data.frame(x = 1:10, 
       y = seq(1e6,1e8,length.out = 10)) 

ggplot(data = df,aes(x = x, y =y)) + 
    geom_point() + 
    scale_y_log10(limits = c(1,1e8)) 

enter image description here

voy a asumir que usted realmente no quiere decir ay mínimo eje de 0, ya que en una escala logarítmica que , um, es problemático.

+5

+1 De acuerdo, nunca entendí el truco de qplot() –

+0

Gracias. Funciona para mi. Aunque desearía haber entendido por qué eso funcionó y la versión 'qplot' no. – jml

+7

¿Cómo se expresan los valores en el eje y con superíndices como ese? –

Cuestiones relacionadas