diff --git a/notas.Rmd b/notas.Rmd
index dc4a5fa2ab0b0c81ac3eda197ed7697f06630ff0..fb9f700f184ecbbd423f3cf9fe663c2f98446ea8 100644
--- a/notas.Rmd
+++ b/notas.Rmd
@@ -10,23 +10,24 @@ output:
 # Pacotes.
 
 rm(list = objects())
-library(gdata)
+# library(gdata)
 library(tidyverse)
 
 #-----------------------------------------------------------------------
 # Matrícula.
 
 path <- "/home/walmes/Dropbox/Ensino/ce089-2018-02/"
-x <- read.xls(paste0(path, "RelatoriodeDiariodeClasseExcel.xls"),
-              encoding = "latin1",
-              stringsAsFactors = FALSE,
-              skip = 6)
+x <- gdata::read.xls(paste0(path, "RelatoriodeDiariodeClasseExcel.xls"),
+                     encoding = "latin1",
+                     stringsAsFactors = FALSE,
+                     skip = 6)
+v <- names(x) %in% c("Matrícula", "Nome", "Faltas")
 
 mat <- x %>%
-    select(c("Matrícula", "Nome")) %>%
+    select(names(x)[v]) %>%
     filter(grepl("\\d$", Matrícula)) %>%
     as_tibble() %>%
-    setNames(c("GRR", "nome")) %>%
+    rename("GRR" = "Matrícula", "nome" = "Nome") %>%
     mutate(GRR = str_replace(GRR, "\\D+", "") %>% as.integer())
 str(mat)
 
@@ -42,7 +43,7 @@ str(nt)
 # Seleção de variáveis.
 nt <- nt %>%
     select(`Data e hora`:`Nota revisada`)
-str(nt, give.attr = FALSE)
+str(nt)
 
 # Renomeia variáveis.
 names(nt) <- c("ts", "nome", "email", "item", "orig", "revis")
@@ -51,9 +52,9 @@ names(nt) <- c("ts", "nome", "email", "item", "orig", "revis")
 nt <- nt %>%
     filter(grepl("^Sabatina", item),
            !grepl("walmes", nome, ignore.case = TRUE))
-str(nt, give.attr = FALSE)
+str(nt)
 
-# Cria a estampa de tempo para ordenação.
+# Cria a estampa de tempo para ordenação cronológica dos registros.
 ts_fmt <- "%A, %d %b %Y,  %H:%M"
 nt$ts <- as.POSIXct(nt$ts, format = ts_fmt)
 
@@ -61,20 +62,20 @@ nt$ts <- as.POSIXct(nt$ts, format = ts_fmt)
 nt <- nt %>%
     arrange(nome, item, ts)
 
-# Agrupa pegando o último registro por avaliação.
+# Agrupa pegando o último registro por sabatina.
 ntg <- nt %>%
     group_by(nome, item) %>%
     summarise(nota = last(revis)) %>%
     ungroup()
 str(ntg)
 
-# Para verificar a escala de variação das notas.
+# Para verificar a amplitude de escala das notas.
 # ntg %>%
 #     group_by(item) %>%
 #     summarise(min = min(nota, na.rm = TRUE),
 #               max = max(nota, na.rm = TRUE))
 
-# Cria a variável indentificadora da sabatina ao separar texto.
+# Quebra texto em duas variáveis para ter sabatina e questão.
 ntg <- ntg %>%
     separate(col = "item",
     into = c("S", "Q"),
@@ -82,7 +83,7 @@ ntg <- ntg %>%
 str(ntg)
 
 # Passa notas para escala 0 - 100.
-ntg$nota <- ifelse(ntg$S == "Sabatina 10", yes = 100, no = 10) * ntg$nota
+ntg$nota <- ntg$nota * 10
 
 # Calcula a média por sabatina e converte NA/NaN para 0.
 ntg <- ntg %>%
@@ -159,20 +160,14 @@ nts <- nts %>%
 #-----------------------------------------------------------------------
 # Tabela em HTML.
 
-# nt$Nome <- paste(
-#     sub(pattern = "^(\\w+) .*$",
-#         replacement = "\\1",
-#         x = nt$Nome),
-#     sub(pattern = "^\\w.* (\\w+)$",
-#         replacement = "\\1",
-#         x = nt$Nome))
-
 library(DT)
 
-cap <-
-    "Notas nas avaliações (S: sabatina) ordenadas pelo GRR. Valores entre 0 e 100.*"
+cap <- "Notas nas avaliações (S: sabatina) ordenadas pelo GRR. Valores entre 0 e 100."
+if (require(htmltools)) {
+    cap <- HTML("<strong>Tabela 1</strong>:", cap)
+}
 
-dt <- datatable(data = select(nts, "GRR", contains("S")),
+dt <- datatable(data = select(nts, "GRR", contains("S"), contains("Faltas")),
                 filter = "top",
                 caption = cap,
                 rownames = FALSE,
@@ -183,7 +178,6 @@ dt <- datatable(data = select(nts, "GRR", contains("S")),
                     paging = FALSE,
                     pageLength = NULL,
                     lengthMenu = NULL))
-# str(dt$x$data)
 
 dt <- formatStyle(table = dt,
                   columns = grepl("^S", names(dt$x$data)),
@@ -193,6 +187,14 @@ dt <- formatStyle(table = dt,
                                                    "gray",
                                                    "#3333ff")))
 
+if (is.element("Faltas", names(dt$x$data))) {
+    dt <- formatStyle(table = dt,
+                      columns = "Faltas",
+                      color = styleInterval(cuts = c(15),
+                                            values = c("#3333ff",
+                                                       "#ff3300")))
+}
+
 dt
 ```
 
@@ -200,7 +202,7 @@ dt
 #-----------------------------------------------------------------------
 # Visualização.
 
-cap <- "Escore final das sabatinas em função do GRR. Cores indicam grupos conforme corte do escore classes."
+cap <- "**Figura 1**: Escore final das sabatinas em função do GRR. Cores indicam grupos conforme corte do escore classes."
 
 # # Acumulada empírica.
 # ggplot(nts, aes(x = S_escore)) +
@@ -226,7 +228,22 @@ ggplot(data = nts,
     xlim(0, 100)
 ```
 
-```{r, eval = FALSE, echo = FALSE, results = "hide", fig.cap = cap}
+```{r, echo = FALSE, fig.cap = cap, message = FALSE, warning = FALSE, results = "hide"}
+ggplot(data = nts,
+       mapping = aes(y = S_escore,
+                     x = Faltas)) +
+    geom_jitter(height = 0, width = 0.5) +
+    geom_smooth(se = FALSE, span = 0.8, color = "gray50")
+
+# Correlação de Spearman.
+x <- with(nts, cor.test(x = S_escore, y = Faltas, method = "spearman"))
+x$p.value
+
+cap <- "**Figura 2**: Diagrama de dispersão relacionando o escore final nas sabatinas e o número de faltas (Spearman, rho = %0.2f, valor p = %0.3g)."
+cap <- sprintf(cap, x$estimate, x$p.value)
+```
+
+```{r, echo = FALSE, results = "hide", fig.cap = cap}
 #-----------------------------------------------------------------------
 # Análise multivariada das notas.
 
@@ -249,7 +266,7 @@ pca$loadings
 #--------------------------------------------
 # Agrupamento hierárquico.
 
-cap <- "Agrupamento hierárquico dos GRR baseado nas distâncias entre os vetores de notas das sabatinas."
+cap <- "**Figura 3**: Agrupamento hierárquico dos GRR baseado nas distâncias entre os vetores de notas das sabatinas."
 
 d <- dist(X)
 hc <- hclust(d = d)
@@ -264,7 +281,7 @@ plot(hc,
 ```
 
 ```{r, eval = FALSE, echo = FALSE, results = "asis"}
-x <- knitr::kable(subset(nt, select = v),
+x <- knitr::kable(nt,
                   caption = cap,
                   row.names = FALSE,
                   na.string = "",