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/.
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
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"))
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
ggsave("calendar.png",p,height=10,width=14,units="cm",dpi=300,type="cairo")
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).