Exibindo três informações em um gráfico


15

Nota: 50 pontos de dados brutos estão anexados agora.

Quero mostrar quanto estudo eu fiz e quantas páginas eu completei ao longo da semana, divididas por dia, e o fiz como mostrado abaixo:insira a descrição da imagem aqui

Já tive pessoas me dizendo que não conseguem entender os gráficos, mas não tenho idéia de como mais posso exibi-los. Como eu precisaria essencialmente de três dimensões sem fazer uma representação cumulativa. Quero evitar o uso de numerosos gráficos de linha, pois após algumas semanas os gráficos ficarão ilegíveis. Não há nada que eu possa fazer?

Como posso exibi-las mais 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

Se você pode postar dados de amostra, os interessados ​​podem reproduzir e mostrar suas soluções. Para ser realista, seriam necessárias várias semanas, pois a essência do problema é o que acontece à medida que o número de semanas aumenta.
Nick Cox

@NickCox Eu poderia repassar em algumas semanas, pois sinceramente não tenho certeza de como os dados serão alterados e só vivi os primeiros 13 dias até agora (3 dos quais sem estudo)

@NickCox Como faço para publicar os dados brutos?

11
Meu conselho é esperar um pouco. Ao atualizar a pergunta, você chamou a atenção para ela. Veja se você obtém novas respostas.
Nick Cox

11
O que você deseja exibir sobre esses dados? Que história você quer contar? O que você está tentando fazer com que as pessoas entendam sobre seus dados com os gráficos de barras?
gung - Restabelece Monica

Respostas:


7

Uma maneira de visualizar dados baseados em data / calendário é através de uma exibição em matriz que codifica os dados em cores. A matriz (ou tabela) é organizada para que as linhas representem semanas e a coluna represente os dias. Você pode adicionar uma coluna final para o total semanal, se isso for desejável.

Isso pode ser implementado de maneira simples no Excel com formatação condicional, se os dados forem organizados corretamente. Em particular, você pode criar uma "grade" de valores com fórmulas que pesquisam nos dados originais. A partir daí, você pode usar a formatação condicional para exibir o resultado.

Aqui está a aparência do resultado. Desculpe, mudei o formato da data. A fórmula na célula H1 é: "=IFERROR(VLOOKUP($G$1+$G6*7+H$5, $B$5:$C$16,2,FALSE), 0)". Está fazendo algumas contas para obter os dias na ordem certa. Espero que seja simples.

Imagem de formatação condicional com arranjo de matriz

Se você realmente deseja empurrar o envelope, pode usar uma estrutura como d3 e seu plug-in de calendário para exibir esses dados. Isso pode ser mais um empreendimento do que vale a pena.

Esse formato é muito semelhante ao modo como o GitHub exibe as atividades / contribuições do usuário ao longo do tempo. Aqui está um usuário (não eu!). insira a descrição da imagem aqui


2
(+1) Gosto dessa abordagem, principalmente porque é adequada para uso na mesma planilha em que os dados estão sendo inseridos. Essa exibição gráfica é efetivamente um mapa de calor . Eu mesmo uso regularmente configurações semelhantes, e acho que uma fraqueza é que os aspectos das tendências podem ser difíceis de entender, por isso pode ser bom complementá-lo com alguma variante do gráfico de linhas para mostrar detalhes mais refinados (Peter Flom, Nick Cox e todos fiz boas sugestões).
quer

6

A característica proeminente do original são as somas semanais. Os valores individuais são significativos somente depois que você aprendeu as cores, e imagino que esse seja um grande motivo para o enredo não funcionar para novos espectadores. Relacionado a isso, o aspecto do tempo dos dias é perdido. Um conjunto seqüencial de cores pode ajudar (por exemplo, 7 tons de azul).

Normalmente, não me importo de rotular todos os itens - os valores exatos são importantes? O gráfico não está fazendo seu trabalho se você não puder interpretá-lo sem todo valor rotulado.

Para a minha tentativa . Dada a aparente importância das somas semanais, plotei as somas cumulativas semanais. Ele mostra as somas semanais e os dias na ordem do tempo. Os valores exatos do dia são menos claros, mas os valores externos ainda se destacam.

Para esses tipos de plotagens de linhas pequenas (que podem ser reduzidas ao tamanho da linha sparkline ), é útil ter uma linha ou área de referência. Para ilustração, adicionei um intervalo de destino. Se um destino não for apropriado, a referência poderá ser algo como o intervalo nas últimas três semanas ou algum valor de referência fixo.

insira a descrição da imagem aqui

Usei vermelho para indicar quais semanas estavam abaixo da meta para uma digitalização rápida.

Com muito mais semanas, você pode organizá-las em uma grade, e não em uma lista vertical.

insira a descrição da imagem aqui


Eu acho que isso é excelente. Existe uma maneira eficaz de combinar as horas de estudo e as páginas das informações cobertas, que (pelo menos eu tenho a impressão) parecem ser um dos principais objetivos do exercício? Eu suspeito que seria bastante eficaz no primeiro gráfico ter "horas de estudo" e "páginas concluídas" consecutivas (ou seja, horas de estudo plotadas na coluna à esquerda da semana do ano e páginas concluídas na coluna à direita da semana do ano) ) Mas não tenho certeza do que funcionaria bem no segundo gráfico.
Silverfish

Obviamente, uma solução seria overplot ambas as séries com um eixo vertical secundário para as páginas estudadas, mas muitas pessoas têm opiniões fortes contra isso, por exemplo, Hadley Wickham se recusa deliberadamente a implementá-lo no ggplot. Eu geralmente evitava fazer isso, mas pode fazer sentido se houver alvos para ambos - isso introduziria uma escala natural para o eixo y secundário, para garantir que as áreas de destino por horas e páginas se alinham perfeitamente. Essa decisão de dimensionamento é geralmente a questão controversa com vários eixos y.
Silverfish

Obrigado @Silverfish! Também sou avesso a duas escalas em um gráfico, mas, como você diz, se ambas podem ser colocadas na mesma escala em relação aos seus respectivos alvos, pode funcionar. Eu deveria ter dito explicitamente em minha resposta que, mostrando apenas uma medida, presumi que a outra medida seria mostrada da mesma maneira, mas em gráficos separados. No formulário de lista vertical, cada medida pode ser uma coluna separada de gráficos.
xan

Essa é outra ótima resposta. Eu definitivamente gosto da ideia de alvo que você aplicou. Vou ter que ver o que faço agora que vi todas as respostas. Obrigado

5

Se eu entendi direito, o motivo pelo qual você não deseja usar os gráficos de linha é que você tem muitas semanas e os gráficos ficam confusos.

Se este for o problema, você poderá dividir a série temporal em componentes:

Variação diária

Variação semanal

Tendência de longo prazo

Algo mais.

William S. Cleveland mostra um bom exemplo disso em um de seus livros (não estou no meu escritório e não consigo me lembrar qual dos seus livros tem o exemplo, mas é Visualizando dados ou Os elementos dos dados gráficos ).

R e SAS têm ferramentas para fazer isso. Você tem acesso a um deles?


Eu tenho R no meu computador, mas raramente o usei. (Totalmente disposto a aprender)

Bem, ele tem uma curva de aprendizado, mas analise a função decompose (). Você pode ter que jogar um pouco para conseguir o que deseja. Além disso, se você puder encontrar os livros de Cleveland, eles são excelentes.
Peter Flom - Restabelece Monica

3
Aqui está o exemplo de Cleveland que Peter mencionou, nos documentos R. Se você tiver o R ​​instalado, poderá executar o exemplo: stat.ethz.ch/R-manual/R-devel/library/stats/html/stl.html
Kieran

@Kieran Saída correta? imgur.com/IzRC0h8

5

Primeiro, explicarei algumas objeções aos gráficos de barras originais empilhados ou divididos.

uma. O código de cores parece completamente arbitrário. Portanto, o gráfico não pode ser estudado sem se repetir repetidamente entre legenda e gráfico.

b. Zeros estão implícitos, como segmentos de barra invisíveis. Os zeros fazem parte da variação.

Por essas e outras razões, é difícil decodificar os gráficos.

Dito isto, o gráfico tem mérito se o interesse for principalmente estudar a variação dos totais de uma semana para a outra. Muitas semanas podem ser plotadas como muitas barras. A desvantagem correspondente é que seria cada vez mais difícil estudar variações dentro de semanas.

Backup: Existem três variáveis ​​aqui em cada problema.

  1. Tempo estudado ou páginas concluídas.

  2. Dia da semana.

  3. Número da semana.

À medida que o número de semanas aumenta, qualquer gráfico fica mais detalhado. O desafio é manter esse detalhe sob controle.

Eu consideraria um gráfico de ciclo (outros nomes foram usados ​​na literatura, mas a maioria se refere ao seu uso para analisar variações sazonais). Há uma introdução lúcida aqui de Naomi Robbins. Seus exemplos incluem aqueles como o seu, onde o interesse é por variações dentro e entre semanas.


Obrigado por esse link muito bom. Um comentário sobre sua objeção, os dias são realmente empilhados de (de baixo para cima) de sexta a quinta-feira, mas alguns dias faltando são definitivamente uma preocupação válida em relação à legibilidade.

De fato, mas as pessoas ainda precisam usar a legenda para decodificar.
Nick Cox

R tem um comando monthplot que pode realmente ser usado em dados semanais - consulte stackoverflow.com/questions/5826703/…
Silverfish

5

Os gráficos de linha provavelmente seriam mais fáceis de interpretar se você fizesse uma média móvel de sete, catorze ou talvez 28 dias. Isso os suavizaria e ainda permitiria identificar tendências.

Isso tem algumas semelhanças com a solução de Peter Flom, embora seja bastante mais simples e, portanto, não mostra uma imagem tão completa - mas pode ser suficiente para suas necessidades. Se você estiver gravando seus dados em uma planilha, tem a vantagem de que essa média possa ser realizada facilmente dentro da própria planilha, configurando algumas fórmulas, e o gráfico será atualizado automaticamente à medida que você preencher novos dados.

Atualizar para incluir gráficos

Gráficos de linhas para médias móveis

O gráfico da planilha para as médias de rolagem de sete dias é espetacular, mas parece fazer bem seu trabalho - a variação diária é suavizada para facilitar a detecção de tendências (em comparação com o gráfico diário equivalente, que é tão barulhento que é incompreensível). Algumas características principais são bem escolhidas por esse gráfico: por exemplo, uma grande quantidade de trabalho foi realizada em meados de janeiro, em termos de hora em hora, mas isso não foi acompanhado por um aumento proporcional na média de páginas concluídas por dia. A pausa de Natal é muito visível e, desde que os pontos de dados individuais sejam claramente plotados, não será muito enganador (se apenas a linha estivesse visível, seria impossível determinar que o período fixo era devido à falta de dados!). No entanto, eu recomendo fortemente incluir1.5

Com apenas cinquenta itens de dados, não parecia valer a pena tentar calcular a média durante um período mais longo para detectar tendências de execução mais longas. Da mesma forma, suspeito que a excelente idéia de decomposição sazonal de Peter Flom tenha dificuldades com esses dados limitados. Se você realizasse a decomposição em sua planilha, seria ainda mais importante incluir a quebra como zero dados.

Para reproduzir minhas fórmulas, cole-as para que 'Data' esteja na célula 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

Pelo que entendi sua pergunta, seria possível exibir horas e páginas separadamente. Eu farei isso primeiro. Depois, exibirei Total e Páginas em um gráfico. Suponho que os números reais não são a coisa mais importante - é mais importante obter uma visão geral das semanas e dias da semana, que foram produtivos e quais não foram. Nesse caso, sugiro que você mantenha a estrutura temporal natural, pois na verdade há apenas uma dimensão temporal em seus dados. Ainda podemos encontrar uma maneira de delimitar as semanas.

Usei o seguinte código R e o ggplot2-package para produzir esse primeiro gráfico. Seus dados foram carregados nos dados do objeto no código abaixo. O gráfico é um gráfico de barras agrupadas, com as barras cinza indicando somas semanais 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)))

A altura das barras cinza indica a soma semanal de páginas.

Isso claramente não é perfeito. As barras cinza dominam tanto quanto comparadas a uma barra diurna têm uma área maior para a mesma quantidade de leitura. Poderíamos torná-los mais finos, mas eu gosto do jeito que eles delimitam as semanas. Eles indicam muito bem quais dias são na mesma semana - algo que não seria necessariamente inteligível de outra forma. Especialmente porque temos zero contagens.

No próximo gráfico, usei o número médio de páginas (dentro de uma semana) como a altura da barra cinza.

A altura das barras cinza indica a média semanal das páginas.

Isso provavelmente representa melhor os dados. No entanto, observe que as semanas 0 e 7 são enganosas porque não incluíram 7 dias. Você poderia facilmente contornar isso.

Se você insistir em exibir páginas e horas simultaneamente, poderá fazer um gráfico de barras consecutivas. Pode ser um pouco confuso, pois as duas escalas verticais não são as mesmas. Por outro lado, pode ser bom comparar o tempo gasto e o trabalho feito diretamente dessa maneira.

Combinando tempo e páginas em uma plotagem consecutiva.

EDIT: Percebendo que as cores realmente não são tão necessárias e inspiradas no xan (veja os comentários abaixo), você pode simplificar o enredo para algo assim. Marquei quinta-feira para fornecer um guia visual adicional. Você também pode argumentar a favor do uso da mesma cor em todas as barras para não enfatizar demais alguns dias (arbitrários).

Uma versão mais simples.

Em uma nota final, você também pode tentar escalar os eixos de maneira diferente, dividindo seus valores pelo valor médio. Isso tornaria 1 um valor "normal". Poderíamos incluir uma linha em 1 para enfatizar esse ponto - agora feito no gráfico consecutivo. Isso separa os dias "bons" dos "ruins" em termos de carga média de trabalho.

insira a descrição da imagem aqui

Nesse gráfico, podemos também garantir que uma unidade corresponda à mesma distância em ambos os eixos, como são comparáveis ​​agora.

Observe também que eu errei os dias na primeira versão. Corrigi o código e as parcelas e vou praticar os sete dias da semana agora.

O código que produziu o último gráfico:

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

Isso parece mais com o espírito de melhorar o original, e eu gosto da ideia. Eu não gosto das cores arbitrárias / arco-íris no original ou no seu. Tente um conjunto de cores seqüencial. Barras de cabeça para baixo também não funcionam para mim.
xan

Eu acho que as cores sequenciais podem ser uma melhoria - obrigado pela sugestão. Por outro lado, não acho que as cores sejam tão importantes, pois temos os delimitadores semanais para nos guiar (segunda-feira é o primeiro dia, terça-feira é o segundo, etc.). Estamos de acordo sobre o enredo consecutivo, como também sugeri na minha resposta. Uma melhoria nesse gráfico pode ser dimensionar os dois eixos verticais de acordo com suas respectivas médias diárias. Isso facilitaria a comparação entre semanas e as páginas lidas / o tempo gasto.
swmo

Agora que a menção das cores não é importante, ocorre-me que remover a variação de cores poderia funcionar. Os dias da semana já são diferenciados por local. Ou talvez apenas fazendo de quarta-feira um tom diferente como uma âncora adicional.
xan

Muito agradável! Ainda não examinei as outras respostas, mas isso já é uma grande melhoria! Muito obrigado

11
Editei a resposta para incluir as idéias dos comentários. @ Comprometendo-se com um desafio, fico feliz que você ache útil.
swmo

1

xy

  1. plote os dados como linhas com duas semanas como variáveis ​​de agrupamento - para obter duas linhas separadas para cada semana,
  2. ou use gráficos de barras agrupadas em que, para cada dia da semana, há duas barras para as semanas 1 e 2, cada uma com contagem de páginas / horas por dia.

Por favor, veja o que 1. faz acima e 2. não parece muito significativo, infelizmente. Obrigado pela sua resposta.

Não vejo problema nisso ... Não parece bom, mas é uma questão de software que você usa e / ou edição gráfica.
Tim

1.Você realmente não pode dizer se a Semana 1 ou 2 está indo melhor, e se mais algumas semanas foram adicionadas, isso se tornaria muito caótico. 2. Na verdade, eu não me importo com isso, é realmente muito bom. Talvez eu pudesse colocar o original e este juntos para deixar mais claro. (Também mostrado acima agora)

1

O gráfico abaixo mostra as Horas acumuladas de estudo e o total de páginas dentro de cada semana, usando linhas em vez de barras empilhadas, o que, com sorte, facilitará a visualização da tendência em cada semana e a comparação entre as semanas. Preenchai as semanas que faltam com zeros, mas você pode excluí-los, se desejar. O Rcódigo para o processamento de dados e geração de plotagem é publicado abaixo do gráfico.

insira a descrição da imagem aqui

Ao executar as etapas abaixo, primeiro carreguei os dados postados na pergunta em um quadro de dados chamado 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)

Essa é uma idéia muito boa e definitivamente resolve o problema de ser difícil determinar em que dia você está olhando. Obrigado

0

Outra opção é o gráfico de bolhas, onde você pode ter altura vertical para uma variável e tamanho de ponto para a outra. Abaixo, a data (dia) é horizontal, as horas estudadas são verticais, as páginas cobertas por dia são do tamanho de bolhas e a semana é colorida.

insira a descrição da imagem aqui


0

Você pode traçar em 3d. Não verifiquei se o dia da semana foi calculado corretamente, encontre o melhor ângulo de visualização etc., mas isso deve lhe dar uma ideia. Outros enfeites também são possíveis. Por exemplo, talvez seja melhor conectar os pontos a uma linha e mover as linhas de grade para corresponder a cada segunda-feira.

Na verdade, o que seria muito interessante tentar é fazer com que cada linha de grade esquerda-direita e de cima para baixo (como mostrado neste ângulo) corresponda ao mesmo dia da semana (por exemplo, segunda-feira) e, em seguida, coloque gráficos de caixas nas paredes inferior e traseira direita dentro as linhas de grade. Os gráficos de caixa corresponderiam ao total de horas e páginas totais de cada semana, respectivamente. Estou quase certo de que isso seria possível com o rgl, mas exigiria alguns ajustes. Pode valer a pena. As parcelas de violino ou de feijão podem ser ainda melhores.

insira a descrição da imagem aqui

Os dados (para entrada em 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))

Faça o enredo:

#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

Seguir o mapa de calor com o número da semana (do ano), dia da semana e facetas por horas e páginas pode ser útil:

insira a descrição da imagem aqui

A remoção de 2 valores altos fornece melhores gradientes de cores na plotagem:

insira a descrição da imagem aqui

O gráfico de barras a seguir também pode ser útil.

insira a descrição da imagem aqui

Mostra claramente um período de 2 semanas em que nenhum trabalho foi realizado.

Plotar com linhas também pode ser útil (as linhas não são desordenadas; os pontos também podem ser removidos, mantendo apenas duas linhas)

insira a descrição da imagem aqui

Eles transmitem claramente as informações enquanto simplificam o gráfico para facilitar o entendimento.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.