Visualizzazione di tre informazioni su un grafico


15

Nota: ora sono collegati 50 punti di dati non elaborati.

Voglio mostrare quanto studio ho fatto e quante pagine ho completato durante la settimana, suddivise per giorno, e l'ho fatto come mostrato di seguito:inserisci qui la descrizione dell'immagine

Ho avuto persone che mi dicevano che non potevano capire i grafici, ma non ho idea di come altrimenti potrei visualizzarli. Dal momento che avrei essenzialmente bisogno di tre dimensioni senza fare una rappresentazione cumulativa. Voglio evitare di usare numerosi grafici a linee, poiché dopo alcune settimane i grafici diventeranno illeggibili. Non c'è niente che io possa fare?

Come posso visualizzarli più chiaramente?

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

Se puoi pubblicare dati di esempio, gli interessati possono giocare e mostrarti le loro soluzioni. Per essere realistici, occorrerebbero diverse settimane, poiché l'essenza del problema è ciò che accade all'aumentare del numero di settimane.
Nick Cox,

@NickCox Potrei ripubblicare tra qualche settimana poiché non sono sinceramente sicuro di come i dati cambieranno e finora ho vissuto solo i primi 13 giorni (3 dei quali senza studio)

@NickCox Come posso pubblicare i dati non elaborati?

1
Il mio consiglio è di aspettare un po '. Aggiornando la domanda hai attirato l'attenzione su di essa. Vedi se ricevi nuove risposte.
Nick Cox,

1
Cosa vuoi visualizzare su questi dati? Quale storia vuoi raccontare? Cosa stai cercando di convincere le persone a comprendere i tuoi dati con i grafici a barre?
gung - Ripristina Monica

Risposte:


7

Un modo per visualizzare i dati basati su data / calendario è tramite un display a matrice che codifica i dati con il colore. La matrice (o tabella) è organizzata in modo tale che le righe rappresentino le settimane e la colonna i giorni. È possibile aggiungere una colonna finale per il totale settimanale se ciò è desiderabile.

Questo può essere implementato in qualche modo semplicemente in Excel con formattazione condizionale se i dati sono disposti correttamente. In particolare, è possibile creare una "griglia" di valori con formule che ricercano i dati originali. Da lì, è possibile utilizzare la formattazione condizionale per visualizzare il risultato.

Ecco come potrebbe apparire il risultato. Spiacente, ho cambiato il formato della data. La formula nella cella H1 è: "=IFERROR(VLOOKUP($G$1+$G6*7+H$5, $B$5:$C$16,2,FALSE), 0)". Sta facendo un po 'di matematica per ottenere i giorni nell'ordine giusto. Spero sia semplice.

Immagine della formattazione condizionale con disposizione a matrice

Se stai davvero cercando di spingere la busta, puoi usare un framework come d3 e il suo plugin del calendario per visualizzare questi dati. Potrebbe essere più un'impresa di quanto non valga la pena.

Questo formato è molto simile a come GitHub mostra l'attività / i contributi degli utenti nel tempo. Ecco un utente (non io!). inserisci qui la descrizione dell'immagine


2
(+1) Mi piace questo approccio, in particolare perché è adatto per l'uso nello stesso foglio di calcolo in cui vengono immessi i dati. Questo display grafico è effettivamente una mappa di calore . Uso regolarmente configurazioni simili da solo, e trovo che un punto debole sia che gli aspetti delle tendenze possono essere difficili da individuare, quindi può essere utile completarlo con una variante del grafico a linee per mostrare dettagli più fini (Peter Flom, Nick Cox e ho fatto tutti buoni suggerimenti).
Silverfish,

6

La caratteristica principale dell'originale sono le somme settimanali. I singoli valori sono significativi solo dopo aver appreso i colori e immagino che sia un grande motivo per cui la trama non funziona per i nuovi spettatori. In relazione a ciò, l'aspetto temporale dei giorni è perso. Un set sequenziale di colori può aiutare (ad esempio, 7 tonalità di blu).

Normalmente non mi interessa etichettare ogni articolo: i valori esatti sono così importanti? Il grafico non sta facendo il suo lavoro se non puoi interpretarlo senza ogni valore etichettato.

Alla mia prova . Data l'apparente importanza delle somme settimanali, ho tracciato le somme cumulative settimanali. Mostra le somme settimanali e i giorni nell'ordine temporale. I valori del giorno esatto sono meno chiari, ma i valori anomali resteranno comunque evidenti.

Per questi tipi di grafici a linee piccole (che potrebbero essere ridotti alle dimensioni della sparkline ) è utile disporre di una linea o un'area di riferimento. A titolo illustrativo, ho aggiunto un intervallo target. Se un obiettivo non è appropriato, allora il riferimento potrebbe essere qualcosa come l'intervallo nelle ultime tre settimane o un valore di riferimento fisso.

inserisci qui la descrizione dell'immagine

Ho usato il rosso per indicare quali settimane erano al di sotto del target per la scansione rapida.

Con molte più settimane, potresti organizzarle in una griglia anziché in un elenco verticale.

inserisci qui la descrizione dell'immagine


Penso che sia eccellente Esiste un modo efficace per combinare le ore di studio e le pagine coperte delle informazioni, che (almeno ho l'impressione) sembra essere uno degli obiettivi chiave dell'esercizio? Ho il sospetto che sarebbe abbastanza efficace nel primo grafico avere "ore di studio" e "pagine completate" back-to-back (cioè ore di studio tracciate nella colonna a sinistra della settimana dell'anno e pagine completate nella colonna a destra della settimana dell'anno ). Ma non sono sicuro di cosa funzionerebbe bene nella seconda grafica.
Silverfish,

Ovviamente una soluzione sarebbe quella di sovrappopolare entrambe le serie con un asse verticale secondario per le pagine studiate, ma molte persone hanno forti opinioni contrarie a questo, ad esempio Hadley Wickham rifiuta deliberatamente di implementarlo in ggplot. Generalmente eviterei di farlo, ma potrebbe avere senso se ci sono obiettivi per entrambi - questo introdurrebbe una scala naturale per l'asse y secondario, per garantire che le aree target per ore e pagine si allineino perfettamente. Tale decisione di ridimensionamento è generalmente la questione controversa con più assi y.
Silverfish,

Grazie @Silverfish! Sono anche contrario a due scale in un grafico, ma come dici tu se entrambi possono essere messi sulla stessa scala rispetto ai loro rispettivi obiettivi, potrebbe funzionare. Avrei dovuto dire esplicitamente nella mia risposta che, mostrando solo una misura, supponevo che l'altra misura fosse mostrata allo stesso modo, ma in grafici separati. Nel modulo elenco verticale, ogni misura potrebbe essere una colonna separata di grafici.
xan,

Questa è un'altra grande risposta. Mi piace sicuramente l'idea di destinazione che hai applicato. Dovrò vedere cosa faccio ora che ho visualizzato tutte le risposte. Grazie

5

Se ti capisco correttamente, la ragione per cui non vuoi usare i grafici a linee è che hai troppe settimane e che i grafici diventerebbero confusi.

Se questo è il problema, puoi dividere le serie temporali in componenti:

Variazione giornaliera

Variazione settimanale

Tendenza a lungo termine

Qualunque altra cosa.

William S. Cleveland ne mostra un bell'esempio in uno dei suoi libri (non sono nel mio ufficio e non riesco a ricordare quale dei suoi libri ha l'esempio ma si tratta di visualizzare i dati o gli elementi dei dati grafici ).

Sia R che SAS hanno gli strumenti per farlo. Hai accesso a uno di loro?


Ho R sul mio computer, ma raramente l'ho usato. (

Bene, ha una curva di apprendimento ma guarda nella funzione decompose (). Potrebbe essere necessario suonare per ottenere ciò che desideri. Inoltre, se riesci a trovare i libri di Cleveland, sono eccezionali.
Peter Flom - Ripristina Monica

3
Ecco l'esempio di Cleveland di cui parlava Peter, dai documenti di R. Se hai R installato puoi eseguire l'esempio: stat.ethz.ch/R-manual/R-devel/library/stats/html/stl.html
Kieran,

@Kieran Uscita corretta? imgur.com/IzRC0h8

5

Per prima cosa esporrò alcune obiezioni ai tuoi grafici a barre originali impilati o divisi.

un. La codifica a colori appare completamente arbitraria. Quindi il grafico non può essere studiato senza andare avanti e indietro ripetutamente tra legenda e grafico.

b. Gli zeri sono impliciti, come segmenti di barra invisibili. Gli zeri fanno parte della variazione.

Per questi e altri motivi, i grafici sono difficili da decodificare.

Detto questo, il grafico ha valore se l'interesse è principalmente nello studio della variazione dei totali di settimana in settimana. Molte settimane potrebbero essere tracciate come tante barre. Il rovescio della medaglia corrispondente è che sarebbe sempre più difficile studiare le variazioni in poche settimane.

Backup: ci sono tre variabili qui in ogni problema.

  1. Tempo studiato o pagine complete.

  2. Giorno della settimana.

  3. Numero della settimana.

All'aumentare del numero di settimane, ogni grafico sarà più dettagliato. La sfida è tenere sotto controllo quel dettaglio.

Vorrei prendere in considerazione una trama del ciclo (altri nomi sono stati usati in letteratura, ma la maggior parte si riferisce al suo uso per osservare le variazioni stagionali). Vi è una presentazione lucida qui di Naomi Robbins. I suoi esempi includono quelli come i tuoi in cui l'interesse è nelle variazioni entro e tra le settimane.


Grazie per questo bellissimo link. Un commento sulla tua obiezione, i giorni sono effettivamente accatastati da (dal basso verso l'alto) venerdì-> giovedì, ma alcuni giorni mancanti sono sicuramente una preoccupazione valida per quanto riguarda la leggibilità.

Anzi, ma le persone devono ancora usare la legenda per decodificare.
Nick Cox,

R ha un comando monthplot che può essere effettivamente utilizzato sui dati settimanali - vedi stackoverflow.com/questions/5826703/…
Silverfish

5

I grafici a linee sarebbero probabilmente più facili da interpretare se prendessi una media mobile di sette, quattordici o forse 28 giorni. Ciò li livellerebbe e ti consentirebbe comunque di individuare le tendenze.

Questo ha alcune somiglianze con la soluzione di Peter Flom, anche se è piuttosto più semplice e quindi non racconta un'immagine altrettanto completa - ma potrebbe benissimo essere sufficiente per le tue esigenze. Se stai registrando i tuoi dati in un foglio di calcolo, ha il vantaggio che tale media può essere facilmente eseguita all'interno del foglio di calcolo stesso impostando alcune formule e il grafico si aggiornerà automaticamente mentre inserisci i nuovi dati.

Aggiornamento per includere grafici

Grafici a linee per medie mobili

Il grafico del foglio di calcolo per le medie variabili di sette giorni non è spettacolare, ma sembra fare bene il suo lavoro - la variazione giornaliera viene smussata in modo che le tendenze siano più facili da rilevare (rispetto al grafico giornaliero equivalente che è così rumoroso da essere incomprensibile). Alcune caratteristiche chiave sono individuate bene da questa trama: ad esempio, una grande quantità di lavoro è stata fatta a metà gennaio, in termini orari, ma ciò non è stato accompagnato da un aumento proporzionale delle pagine medie completate al giorno. La pausa natalizia è molto visibile e fintanto che i singoli punti dati sono tracciati in modo chiaro, non è troppo fuorviante (se fosse visibile solo la linea, sarebbe impossibile determinare che il periodo piatto fosse dovuto alla mancanza di dati!). Tuttavia, consiglio vivamente di includere1.5

Con solo cinquanta voci di dati, non è sembrato degno provare la media per un periodo di tempo più lungo per rilevare le tendenze a più lungo termine. Allo stesso modo, ho il sospetto che l'eccellente idea di decomposizione stagionale di Peter Flom avrebbe difficoltà con dati così limitati. Se dovessi eseguire la decomposizione nel tuo foglio di calcolo, sarebbe ancora più importante includere l'interruzione come zero dati.

Per riprodurre le mie formule, incollalo in modo che 'Data' sia nella cella 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)

5

Se capisco la tua domanda, sarebbe possibile visualizzare ore e pagine separatamente. Lo farò prima io. Successivamente, visualizzerò Totale e Pagine in un grafico. Immagino che i numeri reali non siano la cosa più importante: è più importante avere una panoramica delle settimane e dei giorni feriali, che sono stati produttivi e quali no. In tal caso, ti suggerisco di mantenere la struttura temporale naturale poiché in realtà esiste solo una dimensione temporale nei tuoi dati. Possiamo ancora trovare un modo per delimitare le settimane.

Ho usato il seguente codice R e il pacchetto ggplot2 per produrre questa prima trama. I tuoi dati sono stati caricati nei dati oggetto nel codice seguente. La trama è una trama a barre raggruppate, con le barre grigie che indicano somme settimanali di pagine.

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)))

L'altezza delle barre grigie indica la somma settimanale delle pagine.

Questo chiaramente non è perfetto. Le barre grigie dominano molto in quanto rispetto a una barra del giorno hanno un'area più grande per la stessa quantità di lettura. Potremmo renderli più sottili, ma mi piace il modo in cui delimitano le settimane. Indicano abbastanza bene quali giorni sono nella stessa settimana - qualcosa che altrimenti non sarebbe necessariamente comprensibile. Soprattutto perché abbiamo zero conteggi.

Nella trama successiva, ho usato il numero medio di pagine (entro una settimana) come altezza della barra grigia.

L'altezza delle barre grigie indica la media settimanale delle pagine.

Questo probabilmente rappresenta i dati migliori. Tuttavia, nota che le settimane 0 e 7 sono fuorvianti perché non includevano 7 giorni. Potresti facilmente aggirare questo.

Se si insiste sulla visualizzazione simultanea di pagine e tempo, è possibile eseguire un grafico a barre back-to-back. Potrebbe essere un po 'confuso poiché le due scale verticali non sono uguali. D'altra parte, potrebbe essere utile confrontare il tempo trascorso e il lavoro svolto direttamente in questo modo.

Combinazione di tempo e pagine in una trama back-to-back.

EDIT: Rendendosi conto che i colori non sono davvero necessari e ispirati da xan (vedi i commenti qui sotto) potresti semplificare la trama in qualcosa del genere. Ho segnato giovedì per dare una guida visiva aggiuntiva. Potresti anche argomentare a favore dell'uso dello stesso colore per tutte le barre per non enfatizzare alcuni giorni (arbitrari).

Una versione più semplice.

In una nota finale, puoi anche provare a ridimensionare gli assi in modo diverso dividendo i valori per il valore medio. Ciò renderebbe 1 un valore "normale". Potremmo includere una linea a 1 per enfatizzare questo punto - ora fatto sulla trama back-to-back. Ciò separa i giorni "buoni" da "cattivi" in termini di carico di lavoro medio.

inserisci qui la descrizione dell'immagine

Su questo diagramma potremmo anche assicurarci che un'unità corrisponda alla stessa distanza su entrambi gli assi poiché sono comparabili ora.

Si noti inoltre che ho incasinato i giorni nella prima versione. Ho corretto il codice e le trame e ora vado a esercitarmi nei sette giorni della settimana.

Il codice che ha prodotto l'ultima 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))

Questo sembra soprattutto nello spirito di migliorare l'originale e mi piace l'idea. Non mi piacciono i colori arbitrari / arcobaleno nell'originale o nel tuo. Prova un set di colori sequenziale. Le barre capovolte non funzionano neanche per me.
xan,

Penso che i colori sequenziali potrebbero essere un miglioramento - grazie per il suggerimento. D'altra parte, non penso che i colori siano così importanti in quanto abbiamo i delimitatori settimanali che ci guidano (lunedì il primo giorno, martedì il secondo, ecc.). Siamo d'accordo sulla trama back-to-back, come ho anche accennato nella mia risposta. Un miglioramento su quella trama, potrebbe essere quello di ridimensionare entrambi gli assi verticali in base ai rispettivi mezzi giornalieri. Ciò renderebbe più semplice il confronto tra settimane e pagine lette / Trascorrere del tempo.
swmo

Ora che la menzione dei colori non è importante, mi viene in mente che la rimozione della variazione di colore potrebbe funzionare. I giorni della settimana sono già distinti per posizione. O forse solo rendere mercoledì un'ombra diversa come un'ancora aggiuntiva.
xan,

Molto bella! Non ho ancora esaminato le altre risposte, ma questo è sicuramente già un grande miglioramento! Grazie mille

1
Ho modificato la risposta per includere le idee dai commenti. @Commettere su una sfida, sono contento che tu l'abbia trovata utile.
swmo,

1

Xy

  1. traccia i dati come righe con due settimane come variabili di raggruppamento, in modo da ottenere due righe separate per ogni settimana,
  2. oppure utilizza grafici a barre raggruppati in cui per ogni giorno della settimana hai due barre per la settimana 1 e la settimana 2, ognuna con il numero di pagine / ore al giorno.

Si prega di vedere cosa 1. fa sopra, e 2. purtroppo non sembra molto significativo. La ringrazio per la risposta.

Non vedo alcun problema con esso ... Non ha un bell'aspetto ma è una questione di software che usi e / o editing grafico.
Tim

1.Non puoi davvero dire se la settimana 1 o 2 sta andando meglio e se fossero state aggiunte alcune settimane sarebbe troppo caotico. 2. In realtà non mi dispiace questo, in realtà è abbastanza carino. Forse potrei mettere insieme l'originale e questo per renderlo più chiaro. (Anche mostrato sopra ora)

1

La trama seguente mostra le ore cumulative di studio e le pagine totali all'interno di ogni settimana usando le linee anziché le barre sovrapposte, il che si spera renderà più facile vedere l'andamento all'interno di ogni settimana e confrontarlo tra le settimane. Ho riempito le settimane mancanti di zeri, ma puoi escluderle se lo desideri. Il Rcodice per l'elaborazione dei dati e la generazione della trama è pubblicato sotto il grafico.

inserisci qui la descrizione dell'immagine

Nell'eseguire i passaggi seguenti, ho prima caricato i dati pubblicati nella domanda in un frame di dati chiamato 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)

Questa è davvero una buona idea e risolve definitivamente il problema che è difficile determinare in quale giorno stai guardando. Grazie

0

Un'altra opzione è il grafico a bolle, in cui è possibile avere altezza verticale per una variabile e dimensione del punto per l'altra. Sotto, la data (giorno) è orizzontale, le ore studiate sono verticali, le pagine coperte al giorno hanno le dimensioni di una bolla e la settimana è colorata.

inserisci qui la descrizione dell'immagine


0

Potresti tracciare in 3d. Non ho verificato che il giorno della settimana sia stato calcolato correttamente, ho trovato il miglior angolo di visione, ecc., Ma questo dovrebbe darti l'idea. Ulteriori abbellimenti sono anche possibili. Ad esempio, potrebbe essere meglio collegare i punti con una linea e spostare le linee della griglia in modo che corrispondano a ogni lunedì.

In realtà ciò che sarebbe molto interessante da provare è che ogni griglia della griglia sinistra-destra e su-giù (come mostrato in questo angolo) corrisponda allo stesso giorno della settimana (ad es. Lunedì), quindi posiziona i box box sulle pareti inferiore e posteriore destra all'interno le linee della griglia. I grafici a scatole corrisponderebbero rispettivamente alle ore totali e alle pagine totali per ogni settimana. Sono quasi certo che sarebbe possibile avere a che fare con rgl, ma richiederebbe qualche aggiustamento. Potrebbe valerne la pena. Le trame di violino o trame di fagioli possono essere ancora migliori.

inserisci qui la descrizione dell'immagine

I dati (per l'immissione in 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))

Crea 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)

-1

Seguire la mappa di calore con il numero della settimana (dell'anno), il giorno della settimana e le sfaccettature per ore e pagine può essere utile:

inserisci qui la descrizione dell'immagine

La rimozione di 2 valori elevati offre migliori gradienti di colore sulla trama:

inserisci qui la descrizione dell'immagine

Anche il seguente diagramma a barre può essere utile.

inserisci qui la descrizione dell'immagine

Mostra chiaramente un periodo di 2 settimane in cui non è stato svolto alcun lavoro.

Il grafico con linee può anche essere utile (le linee non sono disordinate; i punti possono anche essere rimossi, mantenendo solo due linee)

inserisci qui la descrizione dell'immagine

Trasmettono chiaramente le informazioni semplificando la trama per una facile comprensione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.