Mostrar tres piezas de información en un gráfico

15

Nota: ahora se adjuntan 50 puntos de datos sin procesar.

Quiero mostrar cuánto estudio he hecho, y cuántas páginas he completado durante la semana, divididas por día, y lo he hecho como se muestra a continuación:ingrese la descripción de la imagen aquí

La gente me ha dicho que no pueden entender los gráficos, pero no tengo idea de qué otra manera puedo mostrarlos. Ya que esencialmente necesitaría tres dimensiones sin hacer una representación acumulativa. Quiero evitar el uso de numerosos gráficos de líneas, ya que después de unas semanas los gráficos se volverán ilegibles. ¿No hay nada que pueda hacer?

¿Cómo puedo mostrar esto más claramente?

Date        Total   Total pages
21/11/2014  2.4166   0
22/11/2014  0        0
23/11/2014  1.5833   4
24/11/2014  3.0166  13
25/11/2014  2.4999   6
26/11/2014  1.4833   3
27/11/2014  3.0499   6
28/11/2014  0        0
29/11/2014  2.4499   5
30/11/2014  2.8833   2
 1/12/2014  0        0
 2/12/2014  4.1166   8
 3/12/2014  1.3333   5
 4/12/2014  1.2499   3
 5/12/2014  1.6666   8
 6/12/2014  0        0
 7/12/2014  2.4833   9
29/12/2014  0        0
30/12/2014  1.2332   1
31/12/2014  0.3333   0
 1/01/2015  3.5666   2
 2/01/2015  0.8166   0
 3/01/2015  2.75    28
 4/01/2015  0.4166   0
 5/01/2015  1.2833   0
 6/01/2015  0.3333   3
 7/01/2015  0        0
 8/01/2015  0        0
 9/01/2015  2.35     2
10/01/2015  0.5666   0
11/01/2015  0        0
12/01/2015  1.6666   0
13/01/2015  2.2666   5
14/01/2015  2.5165   6
15/01/2015  2.0166   0
16/01/2015  2.9666   1
17/01/2015  0.8333   0
18/01/2015  0.6666   1
19/01/2015  1.45     0
20/01/2015  0.3166   0
21/01/2015  0        0
22/01/2015  0.2333   0
23/01/2015  0.85     2
24/01/2015  0        0
25/01/2015  0        0
26/01/2015  0.6666   4
27/01/2015  0.8333   1
28/01/2015  1.5498   5
29/01/2015  6.4159   9
30/01/2015  2.9166   0
gung - Restablece a Monica
fuente
Si puede publicar datos de muestra, los interesados ​​pueden jugar y mostrarle sus soluciones. Para ser realista, necesitaría varias semanas, ya que la esencia del problema es lo que sucede a medida que aumenta el número de semanas.
Nick Cox
@NickCox Podría volver a publicar en unas pocas semanas ya que honestamente no estoy seguro de cómo cambiarán los datos y solo he vivido los primeros 13 días hasta el momento (3 de los cuales sin estudio)
@ NickCox ¿Cómo publico los datos en bruto?
1
Mi consejo es esperar un poco. Al actualizar la pregunta, ha llamado su atención. Vea si obtiene nuevas respuestas.
Nick Cox
1
¿Qué es lo que quieres mostrar sobre estos datos? ¿Qué historia quieres contar? ¿Qué está tratando de hacer que la gente entienda acerca de sus datos con los gráficos de barras?
gung - Restablece a Monica

Respuestas:

7

Una forma de visualizar datos basados ​​en fecha / calendario es a través de una pantalla matricial que codifica los datos con color. La matriz (o tabla) se organiza de modo que las filas representen semanas y la columna represente días. Puede agregar una columna final para el total semanal si eso es conveniente.

Esto puede implementarse de manera algo simple en Excel con formato condicional si los datos están organizados correctamente. En particular, puede crear una "cuadrícula" de valores con fórmulas que busquen en sus datos originales. A partir de ahí, puede usar el formato condicional para mostrar el resultado.

Así es como podría verse el resultado. Lo siento, cambié el formato de fecha. La fórmula de celda H1 es: "=IFERROR(VLOOKUP($G$1+$G6*7+H$5, $B$5:$C$16,2,FALSE), 0)". Está haciendo algunos cálculos para obtener los días en el orden correcto. Esperemos que sea sencillo.

Imagen de formato condicional con disposición matricial

Si realmente está buscando empujar el sobre, puede usar un marco como d3 y su complemento de calendario para mostrar estos datos. Sin embargo, eso podría ser más una empresa de lo que vale.

Este formato es muy similar a cómo GitHub muestra la actividad / contribuciones del usuario a lo largo del tiempo. Aquí hay un usuario (¡no yo!). ingrese la descripción de la imagen aquí

Byron Wall
fuente
2
(+1) Me gusta este enfoque, particularmente porque es muy adecuado para usar en la misma hoja de cálculo en la que se ingresan los datos. Esta pantalla gráfica es efectivamente un mapa de calor . Regularmente uso configuraciones similares yo mismo, y encuentro que una debilidad es que los aspectos de las tendencias pueden ser difíciles de distinguir, por lo que puede ser bueno complementar esto con alguna variante del gráfico lineal para mostrar detalles más finos (Peter Flom, Nick Cox y todos he hecho buenas sugerencias).
Silverfish
6

La característica destacada del original son las sumas semanales. Los valores individuales son significativos solo después de haber aprendido los colores, y me imagino que esa es una gran razón por la que la trama no funciona para los nuevos espectadores. Relacionado con eso, se pierde el aspecto del tiempo de los días. Un conjunto secuencial de colores puede ayudar (por ejemplo, 7 tonos de azul).

Normalmente no me importa etiquetar cada elemento: ¿son importantes los valores exactos? El gráfico no está haciendo su trabajo si no puede interpretarlo sin todos los valores etiquetados.

A mi intento . Dada la aparente importancia de las sumas semanales, he trazado las sumas acumulativas semanales. Muestra las sumas semanales y los días en orden de tiempo. Los valores del día exacto son menos claros, pero los valores atípicos seguirán destacando.

Para estos tipos de gráficos de líneas pequeñas (que podrían reducirse al tamaño de minigráfico ) es útil tener una línea o área de referencia. Por ejemplo, he agregado un rango objetivo. Si un objetivo no es apropiado, entonces la referencia podría ser algo así como el rango durante las últimas tres semanas o algún valor de referencia fijo.

ingrese la descripción de la imagen aquí

He usado rojo para indicar qué semanas estuvieron por debajo del objetivo para un escaneo rápido.

Con muchas más semanas, puede organizarlas en una cuadrícula en lugar de una lista vertical.

ingrese la descripción de la imagen aquí

xan
fuente
Creo que esto es excelente. ¿Existe una forma efectiva de combinar las horas de estudio y las páginas de información cubierta, que (al menos me da la impresión) parece ser uno de los objetivos clave del ejercicio? Sospecho que sería bastante efectivo en el primer gráfico tener "horas de estudio" y "páginas completadas" consecutivamente (es decir, horas de estudio trazadas en la columna a la izquierda de la semana del año, y páginas completadas en la columna a la derecha de la semana del año ) Pero no estoy seguro de qué funcionaría bien en el segundo gráfico.
Silverfish
Obviamente, una solución sería trazar en exceso ambas series con un eje vertical secundario para las páginas estudiadas, pero mucha gente tiene fuertes opiniones en contra de esto, por ejemplo, Hadley Wickham se niega deliberadamente a implementarlo en ggplot. En general, evitaría hacer esto, pero podría tener sentido si hay objetivos para ambos: esto introduciría una escala natural para el eje y secundario, para garantizar que las áreas objetivo durante horas y páginas se alineen perfectamente. Esa decisión de escala es generalmente el tema controvertido con múltiples ejes y.
Silverfish
Gracias @Silverfish! También soy reacio a dos escalas en un gráfico, pero como dices si ambos se pueden poner en la misma escala en relación con sus objetivos respectivos, podría funcionar. Debería haber dicho explícitamente en mi respuesta que al mostrar solo una medida asumí que la otra medida se mostraría de la misma manera pero en gráficos separados. En la forma de lista vertical, cada medida podría ser una columna separada de gráficos.
xan
Esta es otra gran respuesta. Definitivamente me gusta la idea objetivo que has aplicado. Tendré que ver lo que hago ahora que he visto todas las respuestas. Gracias
5

Si te entiendo correctamente, la razón por la que no quieres usar los gráficos lineales es que tienes demasiadas semanas y los gráficos se volverán desordenados.

Si este es el problema, puede dividir la serie temporal en componentes:

Variación diaria

Variación semanal

Tendencia a largo plazo

Algo más.

William S. Cleveland muestra un buen ejemplo de esto en uno de sus libros (no estoy en mi oficina y no recuerdo cuál de sus libros tiene el ejemplo, pero es Visualizar datos o Los elementos de los datos gráficos ).

Tanto R como SAS tienen herramientas para hacer esto. ¿Tienes acceso a alguno de ellos?

Peter Flom - Restablece a Monica
fuente
Tengo R en mi equipo, pero rara vez lo he utilizado (totalmente dispuesto a aprender sin embargo).
Bueno, tiene una curva de aprendizaje, pero observa la función descomponer (). Es posible que tengas que jugar un poco para conseguir lo que quieres. Además, si puede encontrar los libros de Cleveland, son sobresalientes.
Peter Flom - Restablece a Monica
3
Aquí está el ejemplo de Cleveland que Peter mencionó, de los documentos de R. Si tiene instalado R, puede ejecutar el ejemplo: stat.ethz.ch/R-manual/R-devel/library/stats/html/stl.html
Kieran
@Kieran salida correcta? imgur.com/IzRC0h8
5

Primero explicaré algunas objeciones a sus gráficos de barras apilados o divididos originales.

a. La codificación de color parece completamente arbitraria. Por lo tanto, el gráfico no puede estudiarse sin ir y venir repetidamente entre la leyenda y el gráfico.

si. Los ceros son implícitos, como segmentos de barra invisibles. Los ceros son parte de la variación.

Por esas y otras razones, los gráficos son difíciles de decodificar.

Dicho esto, el gráfico tiene mérito si el interés está principalmente en estudiar la variación en los totales de una semana a otra. Muchas semanas podrían trazarse como muchos bares. La desventaja correspondiente es que sería cada vez más difícil estudiar las variaciones en cuestión de semanas.

Copia de seguridad: hay tres variables aquí en cada problema.

  1. Tiempo estudiado o páginas completas.

  2. Día de la semana.

  3. Número de la semana.

A medida que aumenta el número de semanas, cualquier gráfico será más detallado. El desafío es mantener ese detalle bajo control.

Consideraría un diagrama de ciclo (se han usado otros nombres en la literatura, pero la mayoría se refiere a su uso para observar la variación estacional). Hay una introducción lúcida aquí por Naomi Robbins. Sus ejemplos incluyen aquellos como el suyo donde el interés está en las variaciones dentro y entre semanas.

Nick Cox
fuente
Gracias por ese muy buen enlace. Un comentario sobre su objeción, los días están realmente apilados (de abajo hacia arriba) viernes-> jueves, pero faltar algunos días es definitivamente una preocupación válida con respecto a la legibilidad.
De hecho, pero la gente todavía necesita usar la leyenda para decodificar.
Nick Cox
R tiene un comando de diagrama de mes que en realidad se puede usar en datos semanales; consulte stackoverflow.com/questions/5826703/…
Silverfish el
5

Los gráficos de líneas probablemente serían más fáciles de interpretar si tomara un promedio móvil de siete días, catorce días o tal vez 28 días. Eso los suavizaría y aún te permitiría detectar tendencias.

Esto tiene algunas similitudes con la solución de Peter Flom, aunque es bastante más simple y, por lo tanto, no muestra una imagen tan completa, pero puede ser suficiente para sus necesidades. Si está registrando sus datos en una hoja de cálculo, tiene la ventaja de que dicho promedio puede realizarse fácilmente dentro de la misma hoja de cálculo mediante la configuración de algunas fórmulas, y el gráfico se actualizará automáticamente a medida que ingrese datos nuevos.

Actualización para incluir gráficos

Gráficos lineales para promedios móviles

El gráfico de la hoja de cálculo para los promedios móviles de siete días no es espectacular, pero parece que funciona bien: la variación diaria se suaviza para que las tendencias sean más fáciles de detectar (en comparación con el gráfico diario equivalente que es tan ruidoso como incomprensible). Algunas características clave se eligen bien en esta trama: por ejemplo, se realizó una gran cantidad de trabajo a mediados de enero, en términos por hora, pero esto no fue acompañado por un aumento proporcional en el promedio de páginas completadas por día. El receso de Navidad es muy visible y siempre que los puntos de datos individuales estén claramente trazados, no es demasiado engañoso (si solo la línea fuera visible, ¡sería imposible determinar que el período plano se debió a la falta de datos!). Sin embargo, recomiendo encarecidamente incluir1,5

Con solo cincuenta elementos de datos, no valía la pena intentar promediar durante un período de tiempo más largo para detectar tendencias de ejecución más largas. Del mismo modo, sospecho que la excelente idea de Peter Flom de descomposición estacional tendría problemas con datos tan limitados. Si realizara la descomposición en su hoja de cálculo, sería aún más importante incluir el salto como datos cero.

Para reproducir mis fórmulas, pegue esto para que 'Fecha' esté en la celda A1:

Date    Hours   Pages   7-day rolling hours 7-day rolling pages
25/11/14    2.4999  6       
26/11/14    1.4833  3       
27/11/14    3.0499  6       
28/11/14    0   0       
29/11/14    2.4499  5       
30/11/14    2.8833  2       
01/12/14    0   0   =AVERAGE(B2:B8) =AVERAGE(C2:C8)
02/12/14    4.1166  8   =AVERAGE(B3:B9) =AVERAGE(C3:C9)
03/12/14    1.3333  5   =AVERAGE(B4:B10)    =AVERAGE(C4:C10)
04/12/14    1.2499  3   =AVERAGE(B5:B11)    =AVERAGE(C5:C11)
05/12/14    1.6666  8   =AVERAGE(B6:B12)    =AVERAGE(C6:C12)
06/12/14    0   0   =AVERAGE(B7:B13)    =AVERAGE(C7:C13)
07/12/14    2.4833  9   =AVERAGE(B8:B14)    =AVERAGE(C8:C14)
29/12/14    0   0   =AVERAGE(B9:B15)    =AVERAGE(C9:C15)
30/12/14    1.2332  1   =AVERAGE(B10:B16)   =AVERAGE(C10:C16)
31/12/14    0.3333  0   =AVERAGE(B11:B17)   =AVERAGE(C11:C17)
01/01/15    3.5666  2   =AVERAGE(B12:B18)   =AVERAGE(C12:C18)
02/01/15    0.8166  0   =AVERAGE(B13:B19)   =AVERAGE(C13:C19)
03/01/15    2.75    28  =AVERAGE(B14:B20)   =AVERAGE(C14:C20)
04/01/15    0.4166  0   =AVERAGE(B15:B21)   =AVERAGE(C15:C21)
05/01/15    1.2833  0   =AVERAGE(B16:B22)   =AVERAGE(C16:C22)
06/01/15    0.3333  3   =AVERAGE(B17:B23)   =AVERAGE(C17:C23)
07/01/15    0   0   =AVERAGE(B18:B24)   =AVERAGE(C18:C24)
08/01/15    0   0   =AVERAGE(B19:B25)   =AVERAGE(C19:C25)
09/01/15    2.35    2   =AVERAGE(B20:B26)   =AVERAGE(C20:C26)
10/01/15    0.5666  0   =AVERAGE(B21:B27)   =AVERAGE(C21:C27)
11/01/15    0   0   =AVERAGE(B22:B28)   =AVERAGE(C22:C28)
12/01/15    1.6666  0   =AVERAGE(B23:B29)   =AVERAGE(C23:C29)
13/01/15    2.2666  5   =AVERAGE(B24:B30)   =AVERAGE(C24:C30)
14/01/15    2.5165  6   =AVERAGE(B25:B31)   =AVERAGE(C25:C31)
15/01/15    2.0166  0   =AVERAGE(B26:B32)   =AVERAGE(C26:C32)
16/01/15    2.9666  1   =AVERAGE(B27:B33)   =AVERAGE(C27:C33)
17/01/15    0.8333  0   =AVERAGE(B28:B34)   =AVERAGE(C28:C34)
18/01/15    0.6666  1   =AVERAGE(B29:B35)   =AVERAGE(C29:C35)
19/01/15    1.45    0   =AVERAGE(B30:B36)   =AVERAGE(C30:C36)
20/01/15    0.3166  0   =AVERAGE(B31:B37)   =AVERAGE(C31:C37)
21/01/15    0   0   =AVERAGE(B32:B38)   =AVERAGE(C32:C38)
22/01/15    0.2333  0   =AVERAGE(B33:B39)   =AVERAGE(C33:C39)
23/01/15    0.85    2   =AVERAGE(B34:B40)   =AVERAGE(C34:C40)
24/01/15    0   0   =AVERAGE(B35:B41)   =AVERAGE(C35:C41)
25/01/15    0   0   =AVERAGE(B36:B42)   =AVERAGE(C36:C42)
26/01/15    0.6666  4   =AVERAGE(B37:B43)   =AVERAGE(C37:C43)
27/01/15    0.8333  1   =AVERAGE(B38:B44)   =AVERAGE(C38:C44)
28/01/15    1.5498  5   =AVERAGE(B39:B45)   =AVERAGE(C39:C45)
29/01/15    6.4159  9   =AVERAGE(B40:B46)   =AVERAGE(C40:C46)
30/01/15    2.9166  0   =AVERAGE(B41:B47)   =AVERAGE(C41:C47)
Lepisma
fuente
5

Según entiendo su pregunta, sería factible mostrar las horas y las páginas por separado. Lo haré primero. Después, mostraré Total y Páginas en una parcela. Supongo que los números reales no son lo más importante: es más importante obtener una visión general de las semanas y los días de la semana, que fueron productivos y cuáles no. En ese caso, sugiero que mantenga la estructura temporal natural ya que en realidad solo hay una dimensión temporal en sus datos. Todavía podemos encontrar una manera de delimitar las semanas.

Usé el siguiente código R y el paquete ggplot2 para producir este primer diagrama. Sus datos se han cargado en los datos del objeto en el siguiente código. El diagrama es un diagrama de barras agrupadas, con las barras grises que indican sumas semanales de páginas.

data <- rbind(data.frame(Date = c("17/11/2014", "18/11/2014", "19/11/2014", "20/11/2014"),
                         Total = rep(0, 4),
                         Pages = rep(0, 4)), 
              data,
              data.frame(Date = c("31/01/2015", "01/02/2015"),
                         Total = c(0, 0),
                         Pages = c(0, 0)))

n <- dim(data)[1]

data$Date <- as.Date(data$Date, format = "%d/%m/%Y")
data$weekday <- factor(rep(c("Monday", "Tuesday", "Wednesday", "Thursday",
                             "Friday", "Saturday", "Sunday"), length.out = n))
data$weekday <- factor(data$weekday, levels(data$weekday)[c(2,6,7,5,1,3,4)])
data$week <- factor(rep(seq(from = 0, to = ceiling(((n - 3)/7))), 
                        each = 7, length.out = n))

ggplot(data = data, aes(x = week, y = Pages)) + 
  geom_bar(aes(fill = weekday), stat = "identity", position = "dodge") + 
  labs(fill = NULL) + xlab(NULL) + ylab("Number of pages") + 
  geom_bar(stat = "identity", alpha = 0.2) + theme(panel.background = element_blank()) +
  scale_x_discrete(labels = paste("Week", seq(from = 0, to = 7)))

La altura de las barras grises indica la suma semanal de páginas.

Esto claramente no es perfecto. Las barras grises dominan demasiado ya que en comparación con una barra de día tienen un área más grande para la misma cantidad de lectura. Podríamos hacerlos más delgados, pero me gusta la forma en que delimitan las semanas. Indican muy bien qué días son en la misma semana, algo que de otro modo no sería necesariamente inteligible. Especialmente porque tenemos cero recuentos.

En la siguiente gráfica, he usado el número medio de páginas (dentro de la semana) como la altura de la barra gris.

La altura de las barras grises indica el promedio semanal de páginas.

Esto probablemente representa mejor los datos. Sin embargo, tenga en cuenta que las semanas 0 y 7 son engañosas porque no incluyen 7 días. Podrías evitar esto fácilmente.

Si insiste en mostrar las páginas y el tiempo simultáneamente, podría hacer un diagrama de barras consecutivas. Puede ser un poco confuso ya que las dos escalas verticales no son lo mismo. Por otro lado, podría ser bueno comparar el tiempo dedicado y el trabajo realizado directamente de esta manera.

Combinando tiempo y páginas en una trama consecutiva.

EDITAR: Al darse cuenta de que los colores realmente no son necesarios e inspirados por xan (ver comentarios a continuación), podría simplificar la trama a algo como esto. Marqué los jueves para dar una guía visual adicional. También podría argumentar a favor del uso del mismo color para todas las barras para no enfatizar demasiado algunos días (arbitrarios).

Una versión más simple.

En una nota final, también podría intentar escalar los ejes de manera diferente dividiendo sus valores por el valor medio. Esto haría de 1 un valor "normal". Podríamos incluir una línea en 1 para enfatizar este punto, ahora hecho en la trama consecutiva. Esto separa los días "buenos" de los "malos" en términos de carga de trabajo media.

ingrese la descripción de la imagen aquí

En este gráfico también podríamos asegurarnos de que una unidad corresponda a la misma distancia en ambos ejes, ya que ahora son comparables.

También tenga en cuenta que arruiné los días en la primera versión. He corregido el código y las tramas y ahora iré a practicar los siete días de la semana.

El código que produjo la última trama:

data$normPages <- data$Pages/mean(data$Pages)
data$normTotal <- data$Total/mean(data$Total)

data$weekNormPages <- data$Pages/(7*mean(data$Pages))
data$weekNormTotal <- data$Total/(7*mean(data$Total))

pTop <- ggplot(data = data, aes(x = week)) + geom_bar(aes(linetype = weekday, y = normPages), 
                                                      stat = "identity", position = "dodge", 
                                                      fill = "dodgerblue") + labs(fill = NULL) +
  xlab(NULL) + ylab("Number of pages") + geom_bar(aes(y = weekNormPages), stat = "identity", alpha = 0.3) + 
  theme(panel.background = element_blank(), axis.ticks.length=unit(0,"cm")) + guides(linetype = FALSE) +
  scale_x_discrete(labels = paste("Week", seq(from = 0, to = 7))) + ylab(NULL) + 
  annotate("text", label = "Pages read", x = "1", y = 10) +
  theme(plot.margin = unit(c(1,.5,.1,.8), "cm")) + geom_hline(yintercept = 1)
pTop

pBot <- ggplot(data = data, aes(x = week)) + geom_bar(aes(linetype = weekday, y = normTotal), 
                                                      stat = "identity", position = "dodge", fill = "dodgerblue") + 
  labs(fill = NULL) +
  xlab(NULL) + ylab("Number of hours") + geom_bar(aes(y = weekNormPages), stat = "identity", alpha = 0.3) + 
  theme(panel.background = element_blank(), axis.ticks.length=unit(0,"cm")) + guides(linetype = FALSE) + 
  scale_x_discrete(labels = NULL) + guides(fill = FALSE) + ylab(NULL) + scale_y_reverse() + 
  theme(plot.margin = unit(c(.1,.5,1,.8), "cm")) + 
  annotate("text", label = "Time spent", x = "1", y = 4) + geom_hline(yintercept = 1)
pBot

grid.arrange(pTop, pBot, heights = c(.5, .5), widths = c(0.5, 0.1))
swmo
fuente
Esto parece más en el espíritu de mejorar el original, y me gusta la idea. Sin embargo, no me gustan los colores arbitrarios / arcoíris ni en el original ni en el tuyo. Pruebe con un conjunto de colores secuenciales. Las barras al revés tampoco funcionan para mí.
xan
Creo que los colores secuenciales podrían ser una mejora. Gracias por la sugerencia. Por otro lado, no creo que los colores sean tan importantes, ya que tenemos los delimitadores semanales para guiarnos (lunes el primer día, martes el segundo, etc.). Estamos de acuerdo sobre la trama consecutiva, como también indiqué en mi respuesta. Una mejora en esa gráfica podría ser escalar ambos ejes verticales de acuerdo con sus respectivos medios diarios. Esto facilitaría la comparación entre semanas y páginas leídas / tiempo.
swmo
Ahora que la mención de que los colores no son importantes, se me ocurre que eliminar la variación de color podría funcionar. Los días de la semana ya se distinguen por ubicación. O tal vez simplemente haciendo del miércoles un tono diferente como un ancla adicional.
xan
¡Muy agradable! Todavía no he revisado las otras respuestas, ¡pero esta es una gran mejora ya! Muchas gracias
1
He editado la respuesta para incluir las ideas de los comentarios. @Comprometiéndose con un desafío, me alegra que lo encuentre útil.
swmo
1

Cambio X eje a días laborables, deja y lo mismo y:

  1. graficar los datos como líneas con dos semanas como variables de agrupación, para obtener dos líneas separadas para cada semana,
  2. o use gráficos de barras agrupadas donde para cada día de la semana tiene dos barras para la semana 1 y la semana 2, cada una con un recuento de páginas / horas por día.
Tim
fuente
Por favor, vea lo que 1. hace arriba, y 2. no parece ser muy significativo por desgracia. Gracias por su respuesta.
No veo ningún problema con eso ... No se ve bien, pero es una cuestión de software que usas y / o edición gráfica.
Tim
1. Realmente no se puede saber si la Semana 1 o 2 va mejor, y si se agregan algunas semanas más, sería demasiado caótico. 2. En realidad no me importa este, en realidad es bastante agradable. Tal vez podría poner el original y este juntos para hacerlo más claro. (También se muestra arriba ahora)
1

El gráfico a continuación muestra las horas de estudio acumuladas y las páginas totales dentro de cada semana usando líneas en lugar de barras apiladas, lo que con suerte hará que sea más fácil ver la tendencia dentro de cada semana y comparar entre semanas. He completado las semanas que faltan con ceros, pero puede excluirlos si lo desea. El Rcódigo para el procesamiento de datos y la generación de gráficos se publica debajo del gráfico.

ingrese la descripción de la imagen aquí

Al llevar a cabo los pasos a continuación, primero cargué los datos publicados en la pregunta en un marco de datos llamado dat.

library(lubridate)
library(dplyr)
library(reshape2)
library(ggplot2)
library(scales)

# Ordered vector of weekdays
weekdayVec = c("Sunday","Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday")

# Change column name
names(dat)[2] = "Hours of Study"

# Convert Date to date format
dat$Date = as.Date(dmy(dat$Date))

# Add a weekday variable and order from Sunday to Saturday
dat$Day = weekdays(dat$Date)
dat$Day = factor(dat$Day, levels=weekdayVec)

# Number the weeks from 1 to 11 and convert to a factor
dat$Week = paste("Week", (as.numeric(dat$Date) - as.numeric(dat$Date[3])) %/% 7 + 2)
dat$Week = factor(dat$Week, levels=paste("Week", c(1:11))) 

## Fill in empty dates (so we can show zero pages/hours during weeks 5 and 6 if we want)
dataFill = expand.grid(Week = paste("Week",1:11), Day=weekdayVec)
dat = merge(dataFill, dat, by=c("Week","Day"), all=TRUE)

# Fill in missing dates
dat$Date = as.Date(c(rep(NA,5), seq(as.Date("2014-11-21"),as.Date("2015-01-30"),1), NA))

# Convert missing data to zeros for Hours of Study and Total Pages
dat = dat %>% mutate(`Hours of Study` = ifelse(is.na(`Hours of Study`), 0, `Hours of Study`),
               `Total Pages` = ifelse(is.na(`Total Pages`), 0, `Total Pages`)) 

# Melt data into long format (for facetting in ggplot2)
dat.m = dat %>% melt(id.var=1:3) %>%
  group_by(Week, variable) %>%
  mutate(cumValue = cumsum(value))

# Plot Hours and Pages by date, with separate cumulative 
# curves for each week
ggplot(dat.m %>% group_by(Week, variable) %>% arrange(Week, Day), 
       aes(Date, cumValue, colour=Week, group=Week)) +
  geom_vline(xintercept=as.numeric(seq(as.Date("2014-11-16"), as.Date("2015-02-06"), 7)-0.5), colour="grey70") +
  geom_line(position=position_dodge(width=0.5)) +
  geom_point(size=2.5, position=position_dodge(width=0.5)) +
  facet_grid(variable ~ ., scales="free_y") +
  guides(colour=guide_legend(reverse=TRUE)) + labs(y="",x="") +
  guides(colour=FALSE) +
  scale_x_date(limits=c(as.Date("2014-11-16"),as.Date("2015-01-31")),
               breaks=seq(as.Date("2014-11-16"),as.Date("2015-01-31"), 7)-0.5,
               labels=paste("                  Week",1:11)) +
  theme_grey(base_size=15)
eipi10
fuente
Esta es una muy buena idea y definitivamente resuelve el problema de que es difícil determinar qué día estás mirando. Gracias
0

Otra opción es el gráfico de burbujas, donde puede tener una altura vertical para una variable y un tamaño de punto para la otra. A continuación, la fecha (día) es horizontal, las horas estudiadas son verticales, las páginas cubiertas por día tienen el tamaño de una burbuja y la semana está coloreada.

ingrese la descripción de la imagen aquí

Abraham
fuente
0

Puedes trazar en 3d. No verifiqué que el día de la semana se haya calculado correctamente, encuentre el mejor ángulo de visión, etc., pero esto debería darle la idea. Adornos adicionales también son posibles. Por ejemplo, podría ser mejor conectar los puntos con una línea y mover las líneas de la cuadrícula para corresponder a cada lunes.

En realidad, lo que sería muy interesante intentar es hacer que cada cuadrícula izquierda-derecha y arriba-abajo (como se muestra en este ángulo) corresponda al mismo día de la semana (por ejemplo, lunes), luego colocando diagramas de caja en las paredes inferior y posterior derecha dentro Las líneas de la cuadrícula. Los diagramas de caja corresponderían al total de horas y páginas totales para cada semana, respectivamente. Estoy casi seguro de que sería posible hacer con rgl, pero requeriría algunos ajustes. Puede valer la pena. Las parcelas de violín o las parcelas de frijoles pueden ser aún mejores.

ingrese la descripción de la imagen aquí

Los datos (para ingresar a R):

dat<-structure(list(Date = structure(c(17L, 19L, 21L, 23L, 25L, 27L, 
29L, 31L, 33L, 38L, 2L, 14L, 36L, 42L, 44L, 46L, 48L, 34L, 39L, 
40L, 1L, 13L, 35L, 41L, 43L, 45L, 47L, 49L, 50L, 3L, 4L, 5L, 
6L, 7L, 8L, 9L, 10L, 11L, 12L, 15L, 16L, 18L, 20L, 22L, 24L, 
26L, 28L, 30L, 32L, 37L), .Label = c("1/1/2015", "1/12/2014", 
"10/1/2015", "11/1/2015", "12/1/2015", "13/01/2015", "14/01/2015", 
"15/01/2015", "16/01/2015", "17/01/2015", "18/01/2015", "19/01/2015", 
"2/1/2015", "2/12/2014", "20/01/2015", "21/01/2015", "21/11/2014", 
"22/01/2015", "22/11/2014", "23/01/2015", "23/11/2014", "24/01/2015", 
"24/11/2014", "25/01/2015", "25/11/2014", "26/01/2015", "26/11/2014", 
"27/01/2015", "27/11/2014", "28/01/2015", "28/11/2014", "29/01/2015", 
"29/11/2014", "29/12/2014", "3/1/2015", "3/12/2014", "30/01/2015", 
"30/11/2014", "30/12/2014", "31/12/2014", "4/1/2015", "4/12/2014", 
"5/1/2015", "5/12/2014", "6/1/2015", "6/12/2014", "7/1/2015", 
"7/12/2014", "8/1/2015", "9/1/2015"), class = "factor"), TotalHours = c(2.4166, 
0, 1.5833, 3.0166, 2.4999, 1.4833, 3.0499, 0, 2.4499, 2.8833, 
0, 4.1166, 1.3333, 1.2499, 1.6666, 0, 2.4833, 0, 1.2332, 0.3333, 
3.5666, 0.8166, 2.75, 0.4166, 1.2833, 0.3333, 0, 0, 2.35, 0.5666, 
0, 1.6666, 2.2666, 2.5165, 2.0166, 2.9666, 0.8333, 0.6666, 1.45, 
0.3166, 0, 0.2333, 0.85, 0, 0, 0.6666, 0.8333, 1.5498, 6.4159, 
2.9166), TotalPages = c(0L, 0L, 4L, 13L, 6L, 3L, 6L, 0L, 5L, 
2L, 0L, 8L, 5L, 3L, 8L, 0L, 9L, 0L, 1L, 0L, 2L, 0L, 28L, 0L, 
0L, 3L, 0L, 0L, 2L, 0L, 0L, 0L, 5L, 6L, 0L, 1L, 0L, 1L, 0L, 0L, 
0L, 0L, 2L, 0L, 0L, 4L, 1L, 5L, 9L, 0L)), .Names = c("Date", 
"TotalHours", "TotalPages"), class = "data.frame", row.names = c(NA, 
-50L))

Haz la trama:

#Get Day of Week
dat<-cbind(weekdays(as.Date(dat[,1], format="%d/%m/%Y")),dat)
colnames(dat)[1]<-"DoW"

#3D Plot
require(rgl)
plot3d(dat[,2],dat[,3],dat[,4],size=15, 
xlab=colnames(dat)[2], ylab=colnames(dat)[3],
zlab=colnames(dat)[4],col=rainbow(7)[as.numeric(dat[,1])])
text3d(x=10, y=6, z=seq(25,15,length=7),levels(dat[,1]),
col=rainbow(7), font=2)
grid3d(side=c("x", "y+", "z"), lwd=1)
Lívido
fuente
-1

El siguiente mapa de calor con el número de semana (del año), el día de la semana y las facetas por horas y páginas pueden ser útiles:

ingrese la descripción de la imagen aquí

Al eliminar 2 valores altos se obtienen mejores gradientes de color en el trazado:

ingrese la descripción de la imagen aquí

El siguiente gráfico de barras también puede ser útil.

ingrese la descripción de la imagen aquí

Muestra claramente un período de 2 semanas cuando no se realizó ningún trabajo.

El trazado con líneas también puede ser útil (las líneas no están abarrotadas; los puntos también se pueden eliminar, manteniendo solo dos líneas)

ingrese la descripción de la imagen aquí

Transmiten claramente la información mientras simplifican la trama para una fácil comprensión.

rnso
fuente