Entendiendo las fechas y trazando un histograma con ggplot2 en R

Pregunta principal

Tengo problemas para entender por qué el manejo de fechas, etiquetas y cortes no funciona como lo hubiera esperado en R al intentar hacer un histograma con ggplot2.

Estoy buscando:

Un histograma de la frecuencia de mis fechas.Marcas de verificación centradas bajo las barras correspondientesEtiquetas de fecha en%Y-b formatoLímites apropiados; espacio vacío minimizado entre el borde del espacio de la cuadrícula y las barras más externas

Hesubí mis datos a pastebin Para hacer esto reproducible. He creado varias columnas ya que no estaba seguro de la mejor manera de hacer esto:

> dates <- read.csv("http://pastebin.com/raw.php?i=sDzXKFxJ", sep=",", header=T)
> head(dates)
       YM       Date Year Month
1 2008-Apr 2008-04-01 2008     4
2 2009-Apr 2009-04-01 2009     4
3 2009-Apr 2009-04-01 2009     4
4 2009-Apr 2009-04-01 2009     4
5 2009-Apr 2009-04-01 2009     4
6 2009-Apr 2009-04-01 2009     4

Esto es lo que intenté:

library(ggplot2)
library(scales)
dates$converted <- as.Date(dates$Date, format="%Y-%m-%d")

ggplot(dates, aes(x=converted)) + geom_histogram()
+      opts(axis.text.x = theme_text(angle=90))

Cuyos rendimientosesta gráfica. yo quería%Y-%b formateo, sin embargo, así que busqué y probé lo siguiente, basado eneste SO:

ggplot(dates, aes(x=converted)) + geom_histogram()
+    scale_x_date(labels=date_format("%Y-%b"),
+    breaks = "1 month")
+    opts(axis.text.x = theme_text(angle=90))

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

Eso me daesta gráfica

Formato correcto de la etiqueta del eje xLa distribución de frecuencia ha cambiado de forma (¿problema de ancho de banda?)Las marcas de verificación no aparecen centradas debajo de las barrasLos xlims también han cambiado.

Trabajé a través del ejemplo en eldocumentación ggplot2 en elscale_x_date sección ygeom_line() parece romperse, etiquetar y centrar las marcas correctamente cuando lo uso con mis mismos datos del eje x. No entiendo por qué el histograma es diferente.

Actualizaciones basadas en respuestas de edgester y gauden.

Al principio pensé que la respuesta de Gauden me había ayudado a resolver mi problema, pero ahora estoy desconcertada después de mirar más de cerca. Tenga en cuenta las diferencias entre los gráficos resultantes de las dos respuestas después del código.

Supongamos para ambos:

library(ggplot2)
library(scales)
dates <- read.csv("http://pastebin.com/raw.php?i=sDzXKFxJ", sep=",", header=T)

Basado en la respuesta de @edgester a continuación, pude hacer lo siguiente:

freqs <- aggregate(dates$Date, by=list(dates$Date), FUN=length)
freqs$names <- as.Date(freqs$Group.1, format="%Y-%m-%d")

ggplot(freqs, aes(x=names, y=x)) + geom_bar(stat="identity") +
       scale_x_date(breaks="1 month", labels=date_format("%Y-%b"),
                    limits=c(as.Date("2008-04-30"),as.Date("2012-04-01"))) +
       ylab("Frequency") + xlab("Year and Month") +
       theme_bw() + opts(axis.text.x = theme_text(angle=90))

Aquí está mi intento basado en la respuesta de Gauden:

dates$Date <- as.Date(dates$Date)
ggplot(dates, aes(x=Date)) + geom_histogram(binwidth=30, colour="white") +
       scale_x_date(labels = date_format("%Y-%b"),
                    breaks = seq(min(dates$Date)-5, max(dates$Date)+5, 30),
                    limits = c(as.Date("2008-05-01"), as.Date("2012-04-01"))) +
       ylab("Frequency") + xlab("Year and Month") +
       theme_bw() + opts(axis.text.x = theme_text(angle=90))

Parcela basada en el enfoque de edgester:

Parcela basada en el enfoque de gauden:

Tenga en cuenta lo siguiente:

brechas en la trama de Gauden para 2009-diciembre y 2010-marzo;table(dates$Date) revela que hay 19 instancias de2009-12-01 y 26 instancias de2010-03-01 en los datosLa trama de Edgester comienza en 2008-abril y termina en 2012-mayo. Esto es correcto basado en un valor mínimo en los datos de 2008-04-01 y una fecha máxima de 2012-05-01. Por alguna razón, la trama de Gauden comienza en 2008-marzo y todavía se las arregla para terminar en 2012-mayo. Después de contar los contenedores y leer las etiquetas del mes, ¡por mi vida no puedo saber qué parcela tiene un extra o falta un bin del histograma!

¿Alguna idea sobre las diferencias aquí? El método de Edgester para crear un conteo separado.

Referencias Relacionadas

Además, aquí hay otros lugares que tienen información sobre fechas y ggplot2 para transeúntes que buscan ayuda:

Comenzó aquí en learnr.wordpress, un popular blog de R Afirmó que necesitaba poner mis datos en el formato POSIXct, que ahora creo que es falso y desperdicié mi tiempo.Otro post de aprendizaje recrea una serie de tiempo en ggplot2, pero no era realmente aplicable a mi situación.r-bloggers tiene un post en este, pero parece desactualizado. Lo simpleformat= La opción no funcionó para mí.Esta pregunta tan Está jugando con pausas y etiquetas. Traté de tratar a miDate Vector como continuo y no creo que haya funcionado tan bien. Parecía que estaba superponiendo el mismo texto de la etiqueta una y otra vez, por lo que las letras parecían un poco extrañas. La distribución es algo correcta, pero hay interrupciones impares. Mi intento basado en la respuesta aceptada fue así (resultado aquí).

Respuestas a la pregunta(3)

Su respuesta a la pregunta