2012-07-04 15 views
117

Estoy generando gráficos para algunos datos, pero el número de marcas es demasiado pequeño, necesito más precisión en la lectura.Aumentar número de marcas de eje

¿Hay alguna forma de aumentar el número de tics de eje en ggplot2?

Sé que puedo decir a ggplot que use un vector como tics de eje, pero lo que quiero es aumentar el número de tics, para todos los datos. En otras palabras, quiero que el número de tilde se calcule a partir de los datos.

Posiblemente ggplot haga esto internamente con algún algoritmo, pero no pude encontrar cómo lo hace, para cambiar de acuerdo con lo que quiero.

Respuesta

123

Puede anular las escalas predeterminadas de ggplots modificando scale_x_continuous y/o scale_y_continuous. Por ejemplo:

library(ggplot2) 
dat <- data.frame(x = rnorm(100), y = rnorm(100)) 

ggplot(dat, aes(x,y)) + 
    geom_point() 

le da esta:

enter image description here

básicas y fundamentales de las escalas le puede dar algo como esto:

ggplot(dat, aes(x,y)) + 
    geom_point() + 
    scale_x_continuous(breaks = round(seq(min(dat$x), max(dat$x), by = 0.5),1)) + 
    scale_y_continuous(breaks = round(seq(min(dat$y), max(dat$y), by = 0.5),1)) 

enter image description here

Si quieren simplemente "acercar" una parte específica de un diagrama, mira xlim() y ylim() respectivamente. También se puede encontrar buena información here para comprender los otros argumentos.

+2

En realidad, el punto sería "generalizar" el argumento 'por', a diferentes escalas de números, es decir, 0.5 es un buen valor para esta información cuyo rango es c (-3,3), pero no es bueno rango para un dato cuyo rango es c (0,5000). ¿Hay alguna función que lo calcule? –

+1

@ JoãoDaniel - Quiero decir que ggplot hace un trabajo decente en esto automáticamente. Si no está produciendo un conjunto satisfactorio de resultados, no estoy seguro de que haya una función incorporada para proporcionar algo diferente. El nivel de detalle que desees será específico para tu trazado, pero tal vez piense en algunos casos de prueba y su nivel de detalle especificado para identificar un patrón ... si esto fuera un diagrama de caja, algo así como 'max-min/30' es un tamaño "cubo" bastante común ...pero puede ser o no un buen punto de partida para ti. – Chase

+2

¿Qué pasa con los valores categóricos en el eje x como meses del año para series temporales? –

53

Puede suministrar un argumento de función a scale, y ggplot usará esa función para calcular las ubicaciones de ticks.

library(ggplot2) 
dat <- data.frame(x = rnorm(100), y = rnorm(100)) 
number_ticks <- function(n) {function(limits) pretty(limits, n)} 

ggplot(dat, aes(x,y)) + 
    geom_point() + 
    scale_x_continuous(breaks=number_ticks(10)) + 
    scale_y_continuous(breaks=number_ticks(10)) 
+72

No es necesario crear la función propia 'number_ticks'. Esto ya se ha implementado en 'pretty_breaks {scales}'. Por lo tanto: 'ggplot (dat, aes (x, y)) + geom_point() + scale_x_continuous (rupturas = pretty_breaks (n = 10)) + scale_y_continuous (rupturas = pretty_breaks (n = 10))' –

+10

@ Daniel Krizian: 1) necesita 'require (scales)' 2) esto parece evitar que mis rupturas aparezcan en notación científica, por lo tanto 1e6 se cambia a 1000000 ?? – smci

+5

Puede usar 'R' de la base R sin el paquete 'escalas', simplemente proporcione los valores como argumento. Por ejemplo: '(breaks = pretty (dat $ x, n = 10))' – Molx

76

Usted puede utilizar el incorporado en pretty función:

ggplot(dat, aes(x,y)) + geom_point() + 
scale_x_continuous(breaks = pretty(dat$x, n = 10)) + 
scale_y_continuous(breaks = pretty(dat$y, n = 10)) 

Basado en Daniel Krizian's comment, también puede utilizar la función pretty_breaks de la biblioteca scales, que se importa automáticamente:

ggplot(dat, aes(x,y)) + geom_point() + 
scale_x_continuous(breaks = scales::pretty_breaks(n = 10)) + 
scale_y_continuous(breaks = scales::pretty_breaks(n = 10)) 

Todo lo que tiene que hacer es insertar la cantidad de marcas deseadas.

+6

¡Esta es claramente la mejor respuesta! Btw ggplot ya importa 'escalas' pero no agrega las funciones a su espacio de nombres. Por lo tanto, puede llamarlos sin la importación como 'scales :: pretty_breaks (n = 10)'. – while

1

Además,

ggplot(dat, aes(x,y)) + 
geom_point() + 
scale_x_continuous(breaks = seq(min(dat$x), max(dat$x), by = 0.05)) 

Works para los datos del eje x escalado binned o discretas (es decir, el redondeo no es necesario).

Cuestiones relacionadas