Como criar um mapa de calor?

Não estamos falando de mapa de calor georeferenciado e sim um mapa de calor genérico, isto é, considerando um plano de projeção qualquer. No nosso exemplo consideramos um plano cartesiano dado pelo cruzamento de duas variáveis categóricas ordinais: dias da semana versus meses do ano.

Vamos fazer um exercício de representar a Temperatura do ano de 2019 num mapa de calor considerando os meses e os dias da semana.

Dados

Primeiro prepara-se um dataframe com seis colunas, uma para o eixo Y (meses do ano) e as outras 5 para o eixo x (dias da semana). Cada dia da semana terá os valores da temperatura. Por simplicidade os valores da temperatura serão gerados aleatoriamente utilizando-se da distribuição uniforme. No mundo real estes valores devem ser obtidos.

# Gerando os dados e armazenando em df.
dt=seq(as.Date("2019-01-01"), as.Date("2019-12-31"),31)
mes=strftime(dt,format="%B")
eixoy <- factor(mes, levels = c(mes)) 
eixox <- c("seg", "ter", "qua", "qui", "sex") 
df <- data.frame(Y = eixoy, matrix(runif(60, 12, 30),nrow = length(eixoy), ncol = length(eixox)))
names(df)[2:(length(eixox)+1)] <- eixox
df
##            Y      seg      ter      qua      qui      sex
## 1    janeiro 17.24941 29.10276 14.79775 22.46761 13.36291
## 2  fevereiro 20.37663 20.66497 27.77690 15.89901 20.68056
## 3      março 28.65687 25.65211 15.28535 20.97419 26.07244
## 4      abril 26.98441 27.08543 26.81093 26.95719 29.67788
## 5       maio 28.72077 16.12066 14.01192 16.90249 19.76688
## 6      junho 25.02693 26.69243 12.02883 20.65105 17.64142
## 7      julho 23.42427 25.02862 13.82290 24.25992 17.89344
## 8     agosto 15.79371 19.54400 12.85222 19.29478 16.41875
## 9   setembro 28.50302 19.40176 29.14845 26.30697 12.26836
## 10   outubro 15.87339 29.38788 21.12283 25.30904 20.24953
## 11  novembro 17.12416 23.23698 15.11947 26.74649 16.97556
## 12  dezembro 12.47604 24.38030 21.73209 17.15558 20.83080

Organizando o dataframe

# Reorganizar o dataframe
require(reshape2)
df_heatmap <- melt(df, id.vars = "Y")
names(df_heatmap)[2:3] <- c("X", "Temperatura")
head(df_heatmap)
##           Y   X Temperatura
## 1   janeiro seg    17.24941
## 2 fevereiro seg    20.37663
## 3     março seg    28.65687
## 4     abril seg    26.98441
## 5      maio seg    28.72077
## 6     junho seg    25.02693

Plotando o mapa de calor

require(ggplot2)
p<-ggplot(df_heatmap, aes(X, Y )) +
  geom_tile(aes(fill = Temperatura), color = "white") +
  scale_fill_gradient(low = "white", high = "yellowgreen") +
  ylab("Meses") +
  xlab("Dia da Semana") +
  theme(legend.title = element_text(size = 10),
        legend.text = element_text(size = 12),
        plot.title = element_text(size=16),
        axis.title=element_text(size=14,face="bold"),
        axis.text.x = element_text(angle = 90, hjust = 1)) +
  labs(fill = "Temperatura")
p

Salve seu mapa de calor

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

Exercício

1-Crie um mapa de calor para o número de nascidos vivos do Brasil no período de 2013 a 2017. No eixo x os anos e no eixo y os meses do nascimento. Os dados dos meses de 2013 a 2017 foram obtidos de https://sidra.ibge.gov.br/pesquisa/registro-civil/quadros/brasil/2017

mes_2013=c(241819,226442,251780,252433,257809,236713,241256,232019,229689,228200,213130,221300) #n. nascidos vivos para os 12 meses
mes_2014=c(243962,234148,255859,255448,261667,242868,251391,238561,241299,230859,221993,235066)
mes_2015=c(250971,236110,273369,259960,264088,247914,247717,238888,244629,233283,222800,233240)
mes_2016=c(242824,237725,263755,253823,258810,242426,237487,228057,222093,211093,196938,208049)
mes_2017=c(223936,220800,264513,250096,266619,251839,245760,240659,233353,228288,222734,225869)

2-Crie um mapa de calor para representar seu histórico escolar.

3-Crie um mapa de calor das precipitações de chuva de Niterói para o mês de maio. (Desafio: encontrar os dados).