¿Cómo ajustar el eje x en el diagrama de densidad de ggplot?

Estoy tratando de obtener una descripción general sobre la frecuencia por hora de mis datos en el día de la semana. Por lo tanto, condensé las diferentes fechas en un solo día para que solo difiera la hora y agregué una columna que representa el día de la semana como un factor ordenado.

El siguiente es un extracto de mis datos:

my.log <- structure(list(Prorated = structure(c(1339535400, 1339536540, 1339524540, 1339480320, 1339537920, 1339529580, 1339500780, 1339532820, 1339522020, 1339522680, 1339465560, 1339529940, 1339472880, 1339508520, 1339519620, 1339536000, 1339526580, 1339514940, 1339518060, 1339512420, 1339513080, 1339500120, 1339543620, 1339485660, 1339496280, 1339526520, 1339514820, 1339531800, 1339531860, 1339501320), class = c("POSIXct", "POSIXt"), tzone = "%Y-%m-%d %H:%M:%S"), Wday = structure(c(1, 1, 1, 2, 1, 2, 2, 2, 2, 2, 3, 2, 3, 3, 3, 3, 4, 1, 1, 3, 3, 4, 4, 5, 5, 5, 1, 2, 2, 2), .Label = c("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"), class = c("ordered", "factor"))), .Names = c("Prorated", "Wday"), row.names = c(NA, 30), class = "data.frame")

range(my.log$Prorated)
# here (n = 30):
# [1] "2012-06-12 01:46:00" "2012-06-12 23:27:00"
# w/ full data set (n = approx. 75000):
# [1] "2012-06-12 00:00:00" "2012-06-12 23:59:00"

Cuando ahora trato de trazar un gráfico de densidad con el siguiente código...

library("ggplot2")
library("scales")
p <- ggplot(my.log) + theme_bw() +
  geom_density(aes(Prorated, colour=Wday)) +
  scale_color_brewer("weekday", palette="Dark2") +
  scale_x_datetime("", breaks=date_breaks("4 hours"),
    labels=date_format("%H:00")) +
  opts(title="Distribution (KDE)")
print(p)

... el eje x con ambos conjuntos de datos no comienza a las 00:00 sino a las 02:00 y, como resultado, todo el diagrama de densidad se traslada al día siguiente. (Quería publicar una imagen aquí, pero como soy nuevo en SO, no puedo hacerlo. Puede encontrarla en ImageShack)

Por lo tanto, mi pregunta: ¿Hay alguna opción para decirle a qqplot() que debe comenzar su gráfico de densidad a las 00:00?

Revisé SO para preguntas relacionadas (o respuestas respectivamente) pero no pude encontrar ninguna. Las únicas opciones que me vienen a la mente son xlim() or scale_x_continuous(limits=...). Pero por lo que yo entiendo, ninguno de los dos es el correcto aquí.

El primero eliminaría puntos de datos (o no, ya que todos los datos del marco de datos de entrada ya están en el rango correcto), mientras que el segundo simplemente cambiaría el punto de vista y, como resultado, cortaría el gráfico a las 23:59 sin agregar estos ( ahora oculto) puntos de datos al principio... Entonces, cuando uso

scale_x_datetime("", breaks=date_breaks("4 hours"), labels=date_format("%H:00"),
  limits=c(as.POSIXct("2012-06-12 00:00:00"), as.POSIXct("2012-06-12 23:59:00"))

en el código anterior, el gráfico se ve mal/no muestra todos los datos.

preguntado el 12 de junio de 12 a las 15:06

1 Respuestas

Es un problema de zona horaria. Vea esta pregunta relacionada: ¿Cuál es la sintaxis de argumento de zona horaria adecuada para scale_datetime() en ggplot 0.9.0?

Puede evitarlo cambiando el labels argumento para function(x) format(x, "%H:00", tz="UTC") (o posiblemente alguna otra zona horaria apropiada). Tuve que cambiar sus datos de ejemplo ya que tenía un atributo tzone mal formado para el POSIXt columna del marco de datos.

ggplot(my.log) + theme_bw() +
  geom_density(aes(Prorated, colour=Wday)) +
  scale_color_brewer("weekday", palette="Dark2") +
  scale_x_datetime("", breaks=date_breaks("4 hours"),
    labels=function(x) format(x,"%H:00",tz="UTC")) +
  opts(title="Distribution (KDE)")

enter image description here

contestado el 23 de mayo de 17 a las 13:05

Leí la publicación que señala, pero ¿no pensé en el hecho de que la única razón para este extraño desplazamiento sería que estoy en UTC + 2. ¡Muchas gracias! - FlipR

Tuve que cambiar sus datos de ejemplo ya que tenía un atributo tzone mal formado para la columna POSIXt del marco de datos - Probé el código antes de publicar la pregunta aquí en una nueva instancia de R y funcionó en mi PC... lo siento - FlipR

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.