2012-07-31 46 views
25

Estoy teniendo un momento muy, muy difícil para que el eje x se vea correcto para mis gráficos.Formateo de fechas en el eje X en ggplot2

Aquí está mi información (generada a través de dput()):

df <- structure(list(Month = structure(1:12, .Label = c("2011-07-31", "2011-08-31", "2011-09-30", "2011-10-31", "2011-11-30", "2011-12-31", "2012-01-31", "2012-02-29", "2012-03-31", "2012-04-30", "2012-05-31", "2012-06-30"), class = "factor"), AvgVisits = c(6.98655104580674,7.66045407330464, 7.69761337479304, 7.54387561322994, 7.24483848458728, 6.32001400498928, 6.66794871794872, 7.207780853854, 7.60281201431308, 6.70113837397123, 6.57634103019538, 6.75321935568936)), .Names = c("Month","AvgVisits"), row.names = c(NA, -12L), class = "data.frame") 

Aquí está el gráfico que estoy tratando de graficar:

ggplot(df, aes(x = Month, y = AvgVisits)) + 
    geom_bar() + 
    theme_bw() + 
    labs(x = "Month", y = "Average Visits per User") 

Ese diagrama funciona bien - pero, si quiero ajustar el formato de la fecha, creo que debo agregar esto: scale_x_date(labels = date_format("%m-%Y"))

Estoy tratando de hacerlo para que las etiquetas de fecha sean 'MMM-YYYY'

ggplot(df, aes(x = Month, y = AvgVisits)) + 
    geom_bar() + 
    theme_bw() + 
    labs(x = "Month", y = "Average Visits per User") + 
    scale_x_date(labels = date_format("%m-%Y")) 

Cuando trama que, Puedo continuar recibiendo este error:

stat_bin: binwidth defaulted to range/30. Use 'binwidth = x' to adjust this.

A pesar de horas de investigación en formato de geom_line y geom_bar, no puedo solucionarlo. ¿Alguien puede explicar lo que estoy haciendo mal?

Editar: Como un pensamiento de seguimiento: ¿Se puede utilizar la fecha como un factor, o debe utilizar as.Date en una columna de fecha?

+0

¿Ha cargado 'biblioteca (escalas)'? – smillig

+0

@smillig yes - 'scales' está cargado. – mikebmassey

Respuesta

32

Can you use date as a factor?

Sí, pero probablemente no deberías.

...or should you use as.Date on a date column?

Sí.

que nos lleva a esto:

library(scales) 
df$Month <- as.Date(df$Month) 
ggplot(df, aes(x = Month, y = AvgVisits)) + 
    geom_bar(stat = "identity") + 
    theme_bw() + 
    labs(x = "Month", y = "Average Visits per User") + 
    scale_x_date(labels = date_format("%m-%Y")) 

enter image description here

en la que he añadido a su llamada stat = "identity"geom_bar.

Además, el mensaje sobre el binwidth no fue un error. Un error realmente indicará "Error" en él, y de manera similar una advertencia siempre dirá "Advertencia" en él. De lo contrario, es solo un mensaje.

+0

Spot on. Gracias. No había visto 'stat =" identity "' antes. Ir a investigar eso más ahora. Gracias. – mikebmassey

+0

@mikebmassey Lo básico para recordar con 'stat =" identity "' es que si está haciendo gráficos de barra y ya ha agregado los datos para tener las alturas de cada barra, entonces úselos. – joran

+0

Seguimiento relacionado con un gráfico de líneas para esto: así que esto solo es aplicable a gráficos de barras - Intenté conectar lo mismo con 'geom_line' - con y sin' stat = "identidad" '- Recibí esta advertencia 'geom_path: cada grupo consiste en solo una observación. Si solo tengo 1 grupo de datos, ¿por qué debería agruparme para que funcione?Gracias – mikebmassey

19

Para mostrar meses como Jan 2017 Feb 2017 etc:

scale_x_date(date_breaks = "1 month", date_labels = "%b %Y") 

Ángulo las fechas si toman demasiado espacio:

theme(axis.text.x=element_text(angle=60, hjust=1)) 
+1

casi se volvió loco, tratando de descubrir por qué esto no funcionaría. Calculado, 'theme_bw()' sobrescribe cualquier cosa 'theme()' hace. Reordenó, y funciona bien. Dejándolo aquí por si acaso, alguien está teniendo el mismo problema. – Ufos

+1

Apreciar tu respuesta, esto me ayuda, escribe mis palabras para mostrar mi agradecimiento – cloudscomputes

Cuestiones relacionadas