Como criar um calendário?

Vamos fazer um exercício de representar eventos em um calendário. Pode ser qualquer evento que você queira. Para nos inspirar vamos nos basear no que fez http://www.roymfrancis.com/calendar-plot-with-ggplot2/.

Dados

Primeiro prepara-se um dataframe com cinco colunas, data, dia da semana, número da semana, mês e dia do mês.

dfr <- data.frame(date=seq(as.Date('2019-06-11'),as.Date('2019-08-12'),by=1))
dfr$day <- factor(strftime(dfr$date,format="%a"),levels=rev(c("seg","ter","qua","qui","sex","sáb","dom")))
dfr$week <- factor(strftime(dfr$date,format="%V"))
dfr$month <- factor(strftime(dfr$date,format="%B"),levels=c("junho","julho","agosto"))
dfr$ddate <- factor(strftime(dfr$date,format="%d"))
head(dfr)
##         date day week month ddate
## 1 2019-06-11 ter   24 junho    11
## 2 2019-06-12 qua   24 junho    12
## 3 2019-06-13 qui   24 junho    13
## 4 2019-06-14 sex   24 junho    14
## 5 2019-06-15 sáb   24 junho    15
## 6 2019-06-16 dom   24 junho    16

Adicionando Eventos no dataframe

Vamos adicionar os eventos que desejamos representar no nosso calendário

dfr$comment <- "Disponível"
dfr$comment[dfr$date>=as.Date('2019-06-11') & dfr$date<=as.Date('2019-06-20')] <- "Em aula"
dfr$comment[dfr$date>=as.Date('2019-06-21') & dfr$date<=as.Date('2019-06-29')] <- "Em prova"
dfr$comment[dfr$date>=as.Date('2019-07-09') & dfr$date<=as.Date('2019-07-13')] <- "Férias"
dfr$comment[dfr$date>=as.Date('2019-08-06') & dfr$date<=as.Date('2019-08-10')] <- "Em prova"
dfr$comment[dfr$day=="sáb" | dfr$day=="dom"] <- "Fim de semana"

Mais um comando para ordenar os fatores na legenda:

dfr$comment <- factor(dfr$comment,levels=c("Disponível","Em aula","Em prova", "Férias", "Fim de semana"))

Plotando o calendário

require(ggplot2)
## Loading required package: ggplot2
p <- ggplot(dfr,aes(x=week,y=day))+
      geom_tile(aes(fill=comment))+
      geom_text(aes(label=ddate))+
      scale_fill_manual(values=c("#8dd3c7","#ffffb3","#fb8072","#DAA520","#BC8F8F" ))+
      facet_grid(~month,scales="free",space="free")+
      labs(x="Semana",y="")+
      theme_bw(base_size=10)+
      theme(legend.title=element_blank(),
            panel.grid=element_blank(),
            panel.border=element_blank(),
            axis.ticks=element_blank(),
            strip.background=element_blank(),
            legend.position="top",
            legend.justification="right",
            legend.direction="horizontal",
            legend.key.size=unit(0.3,"cm"),
            legend.spacing.x=unit(0.2,"cm"))
p

Salve seu calendário

ggsave("calendar.png",p,height=10,width=14,units="cm",dpi=300,type="cairo")

Exercício

1-Crie o seu calendário escolar da UFF para os meses de junho e julho.

2-Crie um calendário para representar ocorrência de chuva (sim ou não) para o mês de maio na cidade de niterói. (Desafio: encontrar os dados em redes sociais, dados climáticos de fontes oficiais, outras maneiras).