Visualização de dados de interesse para a vigilância em saúde
Fazer uma boa apresentação que valorize sua análise de dados e a torne simples para seu interlocutor pode ser desafiador, não é mesmo?! Na vigilância em saúde comunicar análises é uma etapa essencial do trabalho e para isso podemos utilizar diversas estratégias de visualização dos dados.
O profissional de vigilância em saúde produz slides, tabelas, boletins, informes e relatórios diariamente. Estes materiais organizam dados e revelam informações valiosas que apoiam a tomada de decisão de profissionais de saúde e gestores. Neste contexto, a comunicação visual é chave para informar, e os gráficos que compõem a maioria dos relatórios descritivos dão forma às análises da vigilância.
Mas, qual a melhor maneira de se produzir visualização de dados? Qual gráfico utilizar? Existe gráfico específicos para informar um evento ou doença?
Neste curso, você desenvolverá diversas visualizações de dados de
forma rápida com poucos comandos. Com o apoio da linguagem de
programação R
você poderá automatizar a produção gráfica e
torná-la mais interessante e atrativa. Você aprenderá a utilizar cores e
escolher os gráficos corretos para as suas análises.
Você quer análises ainda mais poderosas e gráficos com excelente qualidade visual? Este curso é para você!
Ao final deste curso, você será capaz de:
- produzir gráficos de barras e de linhas;
- criar e interpretar histogramas e boxplots;
- produzir pirâmides etárias;
- criar gráficos temporais de calor (calendar heatmaps);

Atenção
Para seguir com este curso, você deve conhecer as ferramentas básicas
para uso da linguagem R
e do RStudio
, além de
possuir conhecimentos básicos de rotinas de análises e visualização de
dados utilizando a linguagem de programação R
. Lembre-se
que você pode acessar a qualquer momento o curso “Análise de
dados para a vigilância em saúde – curso básico” obtendo os
códigos desejados para a confecção de seus gráficos. Caso não tenha
feito os cursos, sugerimos fortemente que se inscreva neles. Maiores
informações em https://www.abrasco.org.br/site/analise-de-dados-para-a-vigilancia-em-saude/
1. O uso de gráfico na vigilância em saúde
Gráficos são representações de algo que possa ser mensurado, quantificado ou ilustrado de forma mais ou menos lógica. Eles facilitam a análise de dados e quase sempre são primeiramente organizados em tabelas que facilitam sua análise estatística. A partir delas utilizamos algumas ferramentas para interpretação e apresentação de resultados na vigilância em saúde.</div>
Em seu dia a dia provavelmente você já utilizou ferramentas como o
Microsoft Excel
para produção gráfica, ou ainda utilizou
outros softwares que apoiam a visualização de dados de
vigilância como o Epi Info e o Tabwin. Cada vez mais na realidade dos
serviços de vigilância em saúde estamos nos deparando com o aumento do
volume de dados e da sua complexidade, o que torna essas ferramentas
limitadas para a produção de visualização de dados
(DataViz).
O uso da linguagem de programação R
para a produção
gráfica trará muito mais praticidade, principalmente quando o volume de
dados que você utiliza é consideravelmente grande. Além disso, o
R
possibilitará que você possa automatizar a produção
gráfica, podendo também optar por uma gama diversificada de gráficos que
tornam a interpretação da informação mais precisa e clara.
Neste curso, além de produzir uma grande variedade de tipos de gráficos como os de coluna, em barras, pizza, área, linha, pirâmides etárias e gráficos interativos, você aprenderá a escolher os gráficos mais adequados para a representação correta de sua necessidade.
Para isso, no R
você encontrará diversos pacotes que te
permitirão produzir gráficos arrojados e atraentes, com uma ampla gama
de possibilidades. Neste curso, você aprenderá a utilizar dois pacotes
do R
: o módulo base (nativo do R
) e o
ggplot2
(um dos componentes do metapacote
tidyverse
). Vamos lá!
1.1 Preparando os dados
Um dos maiores benefícios da linguagem de programação </div> R
é a facilidade de estruturação de dados e organização das rotinas para
análise de vigilância em saúde. Base de dados como a do Sinan Net é
facilmente importada e, além disso, é possível escrever um roteiro (um
script) para a elaboração de gráfico com excelente qualidade
visual podendo ser replicado de forma automática.
Vamos práticar! Para iniciarmos a conversa sobre a capacidade gráfica
do R
, vamos utilizar a base de dados proveniente do
inquérito epidemiológico do VIGITEL
de 2015. O VIGITEL, sigla para Vigilância de Fatores de Risco e
Proteção para Doenças Crônicas por Inquérito Telefônico, compõe o
sistema de Vigilância de Fatores de Risco para Doenças Crônicas Não
Transmissíveis (DCNT) do Ministério da Saúde.
Para nosso exemplo, selecionaremos apenas algumas das variáveis
disponíveis no inquérito para apresentarmos uma introdução dos recursos
gráficos. Caso necessite acessar o dicionário de dados completo para
conhecer todas as variáveis disponíveis acesse AQUI.
Seguindo, acesse o menu lateral “Arquivos” do curso e faça
download do banco de dados de nome
vigitel_2015.csv
. Lembre-se de manter todas as bases de
dados deste curso em uma mesma pasta ou diretório.
Primeiro precisaremos importar a base de dados VIGITEL 2015. Para
isso utilizaremos a função read_csv2()
do pacote
readr
, carregado pelo metapacote tidyverse
.
Acompanhe o código a seguir e replique-o em seu
RStudio
:
if(!require(tidyverse)) install.packages("tidyverse");library(tidyverse)
#> Carregando pacotes exigidos: tidyverse
#> ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.2 ──
#> ✔ ggplot2 3.3.6 ✔ purrr 0.3.4
#> ✔ tibble 3.1.8 ✔ dplyr 1.0.9
#> ✔ tidyr 1.2.0 ✔ stringr 1.4.0
#> ✔ readr 2.1.2 ✔ forcats 0.5.1
#> ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
#> ✖ dplyr::filter() masks stats::filter()
#> ✖ dplyr::lag() masks stats::lag()
# Importando o banco de dados {`vigitel_2015.csv`}
# e armazenando os dados no objeto `vigitel`
vigitel <- read_csv2('Dados/vigitel_2015.csv')
Pronto, agora os dados estão armazenados no objeto
{vigitel
} e analisaremos a estrutura do banco de dados
utilizando a função glimpse()
do pacote dplyr
.
Perceba que o objeto {vigitel
} contém 12 colunas
(variáveis) e 54.174 linhas (observações) individuais. Acompanhe o
código a seguir e replique-o em seu RStudio
:
# Visualizando a estrutura do objeto {`vigitel`}
glimpse(vigitel)
#> Rows: 54,174
#> Columns: 12
#> $ cidade <chr> "aracaju", "aracaju", "aracaju", "aracaju", "aracaju", "vi…
#> $ regiao <chr> "nordeste", "nordeste", "nordeste", "nordeste", "nordeste"…
#> $ idade <dbl> 59, 20, 53, 32, 70, 84, 84, 27, 71, 72, 70, 64, 56, 64, 52…
#> $ civil <chr> "casado legalmente", "solteiro", "casado legalmente", "sol…
#> $ sexo <chr> "masculino", "feminino", "feminino", "feminino", "feminino…
#> $ racacor <chr> "branca", "parda", "parda", "preta", "parda", "não sabe", …
#> $ peso <dbl> 76, 84, 77, 45, 62, NA, 51, 57, 77, 67, 74, 61, 69, 63, 65…
#> $ altura <dbl> 172, 162, NA, 160, 153, 158, 140, 170, 155, 159, 156, 150,…
#> $ bebe <chr> "não", "não", "não", "não", "sim", "não", "não", "não", "n…
#> $ fuma <chr> "não", "não", "sim, diariamente", "não", "não", "não", "nã…
#> $ hipertensao <chr> "não", "sim", "não", "não", "sim", "não", "sim", "não", "s…
#> $ diabetis <chr> "não", "não", "não", "não", "não", "sim", "sim", "não", "n…
Observe que a variável fuma
contém três categorias de
respostas (“não”, “sim, diariamente” e “sim, mas não diariamente”) que,
para nossos exemplos, vamos categorizar para apenas duas (“sim” e
“não”). Para isso, vamos utilizar a função if_else()
,
aninhada à função mutate()
, ambas do pacote
dplyr
. Com essa função, vamos definir que se a variável for
igual a “não”, substitua para “não” e, caso contrário, substitua para
“sim”. É uma operação simples de transformação. Acompanhe o código a
seguir e replique-o no script em seu computador:
vigitel <- vigitel |>
# Transformando os valores da coluna "fuma" para "sim" e "não" apenas
mutate(fuma = if_else(fuma == "não", "não", "sim"))
Pronto, agora que já organizamos nossos dados podemos seguir para o processo de visualização gráfica.

Atenção
Todos os bancos de dados utilizados para análises neste curso se
encontram no menu lateral “Arquivos” do curso. Lembre-se de fazer o
download do material do curso diretamente do Ambiente Virtual
de Aprendizagem do curso e arquivá-los em um diretório que deverá
indicar para que o R
o localize.
1.2 Utilizando a função plot()
Destacamos para uso em seu dia a dia o módulo base do
R
. Apesar de apresentar gráficos mais simples, ele é muito
bom quando necessitamos obter uma visualização gráfica rápida, com
poucos comandos, como por exemplo, traçar gráficos de linhas ou de
barras ou analisar a distribuição dos dados que serão analisados
utilizando um gráfico do tipo boxplot.
Vamos iniciar a produção dos gráficos utilizando então a função
plot()
. Ela é a mais genérica função para visualizar
objetos gráficos no R
. Essa função é nativa da linguagem,
não sendo necessário nenhum pacote para acessá-la. É muito utilizada
para uma análise rápida, mas possui inúmeros recursos que, quando usados
em conjunto, tornam-se poderosos auxílios para visualização de
dados.
Os argumentos básicos da função plot()
são:
x
: os dados que serão apresentados no eixo x. Usualmente pode ser utilizado sozinho, a depender do tipo de gráfico;y
: os dados que serão apresentados no eixo y é opcional.
Outros argumentos são complementares e serão utilizados para acessarmos alguns recursos gráficos como:
type
: elemento que define qual tipo de gráfico será plotado. Alguns tipos muito úteis são:- “p” para gráfico de pontos;
- “l” para gráfico de linhas;
- “b” para gráfico de pontos e linhas.
pch
: um número inteiro que define a forma geométrica utilizada para gráfico de pontos (quadrado, triângulo);col
: cor dos símbolos, das linhas. Existem muitas formas de especificar as cores. Veremos mais à frente sobre isso;cex
: tamanho de texto e símbolos. O padrão é 1, podendo ser ampliado (por exemplo 1.1, 1.2, 1.3) ou reduzido (por exemplo 0.9, 0.8, 0.5);main
: título do gráfico;xlab
: título do eixo x do gráfico;ylab
: título do eixo y;lty
: um número inteiro que define o tipo de linha dos gráficos. Os mais utilizados serão:- 1 para linha sólida,
- 2 para linha tracejada, e
- 3 para linha pontilhada.
lwd
: espessura da linha.
Vamos demonstrar a criação de quatro tipos de gráficos como
exemplo: gráfico de pontos, boxplot,
histograma e gráfico de barras. Mais à frente vamos aprofundar nosso
conhecimento sobre eles. Neste momento, perceba como podem ser
facilmente elaborados com poucas linhas de código. Perceba, também, que
a maneira que acessamos as colunas da base é utilizando o cifrão
($
).
Para visualizar quatro gráficos alinhados e arrumados, utilizaremos a
função par
e o argumento mfrow
, no qual
definimos que queremos dois gráficos por linha divididos em duas colunas
(c(2, 2)
).
Acompanhe o código a seguir e replique-o em seu
RStudio
:
par(mfrow = c(2, 2))
plot(
x = vigitel$peso,
y = vigitel$altura,
pch = 19,
col = "blue",
cex = 0.3,
main = "Gráfico 1. Gráfico de pontos Peso x Altura",
xlab = "Peso",
ylab = "Altura"
)
abline(v = mean(vigitel$peso, na.rm = T), col = "green", lty = 2, lwd = 3)
abline(h = mean(vigitel$altura, na.rm = T), col = 2, lty = 2, lwd = 3)
# Gráfico 2
boxplot(
vigitel$idade ~ vigitel$sexo,
col = c("darkgreen", "darkred"),
main = "Gráfico 2. Boxplot Idade / Sexo",
xlab = "Sexo",
ylab = "Idade"
)
# Gráfico 3
hist(
x = vigitel$peso,
col = "salmon",
main = "Gráfico 3. Histograma Peso",
xlab = "Peso",
ylab = "Frequência"
)
# Gráfico 4
barplot(prop.table(table(vigitel$fuma)),
col = c("steelblue", "orange"),
main = "Gráfico 4.Proporção de Fumantes")
Figura 1: Exemplo de quatro gráficos diferentes gerados em uma mesma imagem.

Conseguiu visualizar? Caso não tenha conseguido revise o código e atente-se para sua escrita seguindo novamente o passo a passo acima. A qualquer momento você poderá copiar e colar o seu erro e pedir ajuda em algum desses locais:
- Help ou documentação do
R
, link de acesso: https://cran.r-project.org/manuals.html. - Google, link de acesso: https://www.google.com.
- Fóruns como o Stack Overflow, link de acesso: https://pt.stackoverflow.com.
- Fórum do curso para consultar outros alunos do curso.
Vamos lá! Observe na Figura 1 que o Gráfico 1 apresenta um cruzamento
da variável peso
com a variável altura
utilizando um gráfico de pontos. Ele também plota
(imprime) uma linha verde tracejada marcando no eixo x o peso
médio dos dados utilizados e uma linha vermelha marcando a altura média
no* eixo y*. Perceba que aninhamos a função mean()
dentro
da função abline()
. Esta última é a responsável por criar
as linhas. Além disso, para a linha vertical utilizamos o argumento
v
da função, e, para linha horizontal, utilizamos o
argumento h
.
No Gráfico 2 visualizamos um gráfico do tipo
boxplot com o cruzamento da variável categórica
sexo
com a variável numérica Idade
. Para
mostrarmos ao R
que queríamos este cruzamento utilizamos o
operador til (~
). Observe também que concatenamos as cores
num vetor simples, na sequência em que são apresentadas as categorias da
variável.
Já no Gráfico 3 conseguimos visualizar um gráfico do tipo
histograma que apresenta a distribuição da variável
Peso
.
E, finalmente, no Gráfico 4 temos um gráfico de barras com a proporção de fumantes, usando o mesmo recurso de cores do Gráfico 2: um vetor com o nome das cores na sequência das categorias apresentadas.
Bem interessante, não é mesmo? Estes são os gráficos mais utilizados
no dia a dia de análise de dados. Este exercício inicial, apenas
apresenta como é simples e rápido a produção de visualização gráfica com
R
. Agora, precisamos aprofundar os componentes gráficos que
nos exigirão um pouco mais de tempo para a personalização. Aqui
iniciaremos com um elemento muito importante da visualização de dados: a
cor. Siga em frente!