class: center, middle, inverse, title-slide #
## R-Ladies São Paulo
Princípios de Dataviz com R e ggplot2
Semana da Estatística (SEst) UFSCar e USP 2021 ### 19, 20 e 21 de outubro/2021 - 18h30 às 20h00 --- layout: true <div class="my-footer"><span> <a href="https://www.meetup.com/pt-BR/R-Ladies-Sao-Paulo">Meetup</a> | <a href="https://twitter.com/RLadiesSaoPaulo">Twitter</a> | <a href="http://instagram.com/RLadiesSaoPaulo">Instagram</a> | <a href="http://facebook.com/RLadiesSaoPaulo">Facebook</a> | <a href="https://github.com/rladies/meetup-presentations_sao-paulo">GitHub</a> | <a href="https://www.youtube.com/channel/UCU3ePTnZQurDkYgPK61DAOw">YouTube</a> </span></div> --- class: # Programação **Princípios de Dataviz com R e ggplot2** - 19/out: Introdução do pacote `ggplot2` - 20/out: Explorando gráficos com `ggplot2` - 21/out: Storytelling com dados <div class="figure" style="text-align: center"> <img src="img/horst/ggplot2_exploracao_pt.png" alt="Art by <a href='https://github.com/allisonhorst/stats-illustrations'>Allison Horst</a>" width="35%" /> <p class="caption">Art by <a href='https://github.com/allisonhorst/stats-illustrations'>Allison Horst</a></p> </div> --- class: # Hoje **Introdução do pacote `ggplot2`** - Instalação do pacote `ggplot2` - Lógica e estrutura básica de montagem de um gráfico no `ggplot` - Camadas de um gráfico <div class="figure" style="text-align: center"> <img src="img/horst/ggplot2_exploracao_pt.png" alt="Art by <a href='https://github.com/allisonhorst/stats-illustrations'>Allison Horst</a>" width="35%" /> <p class="caption">Art by <a href='https://github.com/allisonhorst/stats-illustrations'>Allison Horst</a></p> </div> --- class: # Pré-requisitos ## `R` e `RStudio` instalados no seu notebook <img src="img/rlogos/rstudio-r.jpg" width="40%" style="display: block; margin: auto;" /> - Instale o R [fazendo o download aqui](https://cran.r-project.org/) e o RStudio [aqui](https://rstudio.com/products/rstudio/download/#download). - Passo a passo da instalação (livro Curso-R) [aqui](https://livro.curso-r.com/1-instalacao.html) --- class: # R-Studio RStudio é a **IDE** (integrated development environment) da Linguagem R, ou seja, o ambiente que utilizamos para editar e executar os códigos em R. Tem quatro áreas, conforme a figura abaixo: <div class="figure" style="text-align: center"> <img src="img/intro-rstudio/RStudio_screen.png" alt="Fonte: <a href='https://github.com/MaryMS/2018-11-R-Course-FatecZS'>Curso Introdução ao R - Fatec</a>" width="80%" /> <p class="caption">Fonte: <a href='https://github.com/MaryMS/2018-11-R-Course-FatecZS'>Curso Introdução ao R - Fatec</a></p> </div> --- class: center, middle, inverse # Vamos começar? <!-- - instalar o ggplot2 (e tidyverse) --> <!-- - explicar como o ggplot2 funciona --> <!-- - exemplos ggplot2 --> --- class: # O que é o ggplot2? Pacote para visualização de dados, criado por [Hadley Wickham](https://github.com/hadley) e mantido pela [RStudio](https://rstudio.com/). Referência: livro [Elegant Graphics for Data Analysis](https://ggplot2-book.org/index.html), do Hadley Wickham. ### Por que usar o ggplot2 para montar minhas visualizações? - Versátil e Esteticamente rico. - Implementação dos conceitos de *Grammar of Graphics*. <div class="figure" style="text-align: center"> <img src="img/horst/ggplot2_obra_prima_pt.png" alt="Art by <a href='https://github.com/allisonhorst/stats-illustrations'>Allison Horst</a>" width="35%" /> <p class="caption">Art by <a href='https://github.com/allisonhorst/stats-illustrations'>Allison Horst</a></p> </div> --- class: # Grammar of Graphics - A origem do nome **GG**plot - Estrutura que segue uma abordagem em camadas para descrever e construir visualizações ou gráficos de maneira estruturada. - Uma visualização geralmente tem vários componentes ou aspectos, e alavancar essa gramática de gráficos em camadas nos ajuda a descrever e entender cada componente envolvido na visualização - em termos de dados, estética, escala, objetos e assim por diante. <img src="img/rlogos/hex-ggplot2.png" width="20%" style="display: block; margin: auto;" /> --- class: # Sintaxe básica do ggplot - Um gráfico feito com ggplot2 é uma soma de **camadas**. - Não precisa utilizar todos os componentes seguintes em seu gráfico, mas é interessante saber que existem. <BR> <img src="img/camadas.png" width="45%" style="display: block; margin: auto;" /> --- class: # Sintaxe básica do ggplot - A função `ggplot()` inicia um gráfico ggplot. - Utilizamos o símbolo **`+`** para somar as camadas. <img src="img/camadas.png" width="45%" style="display: block; margin: auto;" /> ``` ggplot(data, aesthetics) + geometries(statistics) + facets + coordinates + theme ``` --- class: # Construção de um gráfico 1. **Base de dados** que temos interesse em analisar e extrair informação. --- class: # Construção de um gráfico 1. **Base de dados** que temos interesse em analisar e extrair informação. 2. **Mapear as variáveis** que queremos relacionar. --- class: # Construção de um gráfico 1. **Base de dados** que temos interesse em analisar e extrair informação. 2. **Mapear as variáveis** que queremos relacionar. 3. Definir o **objeto geométrico** mais adequado: linha, ponto, barras etc. --- class: # Construção de um gráfico 1. **Base de dados** que temos interesse em analisar e extrair informação. 2. **Mapear as variáveis** que queremos relacionar. 3. Definir o **objeto geométrico** mais adequado: linha, ponto, barras etc. <BR> <BR> ``` ggplot(data = [BASE DE DADOS], mapping = aes(x = [VARIÁVEL X], y = [VARIÁVEL Y])) + geom_[OBJETO GEOMÉTRICO]() ``` --- class: # Objetos geométricos - Gráficos de dispersão: `geom_point()` - Gráficos de barras: `geom_col()` ou `geom_bar()` - Gráficos de linhas: `geom_line()` - Histograma: `geom_hist()` - Boxplot: `geom_boxplot()` - Densidade: `geom_density()` - Suavização: `geom_smooth()` - Adicionar rótulos ou textos: `geom_label()` ou `geom_text()` --- class: # Mão na massa <img src="img/maonamassa.png" width="30%" style="display: block; margin: auto;" /> Primeiro, precisamos instalar os pacotes necessários e carregá-los: - Pacote `dplyr` para manuseio dos dados. - Pacote `ggplot2` para a visualização dos dados. ```r # install.packages('dplyr') # install.packages('ggplot2') library(ggplot2) library(dplyr) ``` --- class: # Mão na massa #### Selecionar a base de dados - Na maioria das vezes precisaremos organizar e limpar os dados antes de utilizar o ggplot. Aqui vamos partir de uma base já organizada. - Para a parte prática, utilizaremos a base do R *airquality*. ```r # Leitura da base de dados airquality <- as_tibble(datasets::airquality) head(airquality) ``` ``` ## # A tibble: 6 × 6 ## Ozone Solar.R Wind Temp Month Day ## <int> <int> <dbl> <int> <int> <int> ## 1 41 190 7.4 67 5 1 ## 2 36 118 8 72 5 2 ## 3 12 149 12.6 74 5 3 ## 4 18 313 11.5 62 5 4 ## 5 NA NA 14.3 56 5 5 ## 6 28 NA 14.9 66 5 6 ``` --- class: # Mão na massa #### Mapear as variáveis As variáveis escolhidas para a minha análise são: **Wind** e **Temp**. ```r select(airquality, Wind, Temp) ``` ``` ## # A tibble: 153 × 2 ## Wind Temp ## <dbl> <int> ## 1 7.4 67 ## 2 8 72 ## 3 12.6 74 ## 4 11.5 62 ## 5 14.3 56 ## 6 14.9 66 ## 7 8.6 65 ## 8 13.8 59 ## 9 20.1 61 ## 10 8.6 69 ## # … with 143 more rows ``` --- class: # Mão na massa #### Definir objeto geométrico Como as variáveis **Wind** e **Temp** são numéricas, vamos fazer um gráfico de pontos, chamando a camada `geom_point()`. --- class: # Mão na massa 1. **Base de dados**: airquality. 2. **Mapear as variáveis**: Wind (x) e Temp (y). 3. **Objeto geométrico**: pontos (`geom_point()`). <BR> ```r ggplot(data = airquality, mapping = aes(x = Wind, y = Temp)) + geom_point() # Camada 1 ``` --- class: # Mão na massa <img src="index_files/figure-html/unnamed-chunk-14-1.png" width="55%" style="display: block; margin: auto;" /> --- class: # Mão na massa O mapeamento das variáveis também pode ser inserido no objeto geométrico: ```r ggplot(data = airquality) + geom_point(mapping = aes(x = Wind, y = Temp)) ``` <img src="index_files/figure-html/unnamed-chunk-15-1.png" width="45%" style="display: block; margin: auto;" /> --- class: # Mão na massa #### Como podemos melhorar? <BR> <BR> <div class="figure" style="text-align: center"> <img src="img/horst/ggplot2_obra_prima_pt.png" alt="Art by <a href='https://github.com/allisonhorst/stats-illustrations'>Allison Horst</a>" width="45%" /> <p class="caption">Art by <a href='https://github.com/allisonhorst/stats-illustrations'>Allison Horst</a></p> </div> --- class: # Mão na massa #### Como podemos melhorar? - Títulos e subtítulos - Nomear eixos - Cores e tamanhos dos objetos geométricos - Temas --- class: # Mão na massa #### Cores e tamanhos dos objetos geométricos - Caso 1: meramente estéticos - Dentro do objeto geométrico (`geom_point()`) - Cor: `geom_point(color = "cor desejada")` - Tamanho dos pontos `geom_point(size = valor numérico)` ```r ggplot(data = airquality, mapping = aes(x = Wind, y = Temp)) + geom_point(color = "blue", size = 4) # Camada 1 ``` --- class: # Mão na massa #### Cores e tamanhos dos objetos geométricos <img src="index_files/figure-html/unnamed-chunk-18-1.png" width="50%" style="display: block; margin: auto;" /> --- class: # Mão na massa #### Cores e tamanhos dos objetos geométricos - Caso 2: associados a uma terceira variável: `aes()` (mapeamento das variáveis) - Dentro do objeto geométrico (`geom_point()`) - Cor: `geom_point(color = variável)` - Tamanho dos pontos `geom_point(size = variável)` Vou associar a cor à variável **Month** (numérico de 5 a 9) ```r ggplot(data = airquality) + geom_point(mapping = aes(x = Wind, y = Temp, color = factor(Month)), size = 2) # Camada 1 ``` --- class: # Mão na massa #### Cores e tamanhos dos objetos geométricos <img src="index_files/figure-html/unnamed-chunk-20-1.png" width="50%" style="display: block; margin: auto;" /> --- class: # Mão na massa #### Cores e tamanhos dos objetos geométricos <img src="index_files/figure-html/unnamed-chunk-21-1.png" width="50%" style="display: block; margin: auto;" /> --- class: # Mão na massa #### Cores e tamanhos dos objetos geométricos ```r ggplot(data = airquality) + geom_point(mapping = aes(x = Wind, y = Temp, size = factor(Month), color = factor(Month))) # Camada 1 ``` --- class: # Mão na massa #### Títulos e subtítulos - Nova camada: `ggtitle("Titulo", "subtítulo")`. ```r ggplot(data = airquality) + geom_point(mapping = aes(x = Wind, y = Temp, size = factor(Month), color = factor(Month))) + # Camada 1 ggtitle("Qualidade do ar", "Temperatura pelo Vento") # Camada 2 ``` --- class: # Mão na massa #### Títulos e subtítulos <img src="index_files/figure-html/unnamed-chunk-24-1.png" width="50%" style="display: block; margin: auto;" /> --- class: # Mão na massa #### Eixos - Nova camada: `labs(x = "nome no eixo x", y = "nome no eixo y")`. ```r ggplot(data = airquality) + geom_point(mapping = aes(x = Wind, y = Temp, size = factor(Month), color = factor(Month))) + # Camada 1 ggtitle("Qualidade do ar", "Temperatura pelo Vento") + # Camada 2 labs(x = "Vento (Km/h)", y = "Temperatura (Farenheit)") # Camada 3 ``` --- class: # Mão na massa #### Eixos <img src="index_files/figure-html/unnamed-chunk-26-1.png" width="50%" style="display: block; margin: auto;" /> --- class: # Mão na massa #### Eixos - Alterar limites das coordenadas: `xlim(c(a,b))` e `ylim(c(a,b))`. ```r ggplot(data = airquality) + geom_point(mapping = aes(x = Wind, y = Temp, size = factor(Month), color = factor(Month))) + # Camada 1 ggtitle("Qualidade do ar", "Temperatura pelo Vento") + # Camada 2 labs(x = "Vento (Km/h)", y = "Temperatura (Farenheit)") + # Camada 3 xlim(c(0,30)) + # Camada 4 ylim(c(50,150)) # Camada 5 ``` --- class: # Mão na massa #### Eixos <img src="index_files/figure-html/unnamed-chunk-28-1.png" width="50%" style="display: block; margin: auto;" /> --- class: # Mão na massa #### Legenda - Nova camana: `guides()`. - Associar com o tipo de representação: cor ```r ggplot(data = airquality) + geom_point(mapping = aes(x = Wind, y = Temp, color = factor(Month)), size = 3) + # Camada 1 ggtitle("Qualidade do ar", "Temperatura pelo Vento") + # Camada 2 labs(x = "Vento (Km/h)", y = "Temperatura (Farenheit)") + # Camada 3 guides(color=guide_legend(title="Mês")) # Camada 3 ``` --- class: # Mão na massa #### Legenda <img src="index_files/figure-html/unnamed-chunk-30-1.png" width="50%" style="display: block; margin: auto;" /> --- class: # Mão na massa #### Temas - Alterar temas dos gráficos: `theme_()`. - Muitos temas! *Tema clássico* ```r ggplot(data = airquality) + geom_point(mapping = aes(x = Wind, y = Temp, color = factor(Month)), size = 3) + # Camada 1 ggtitle("Qualidade do ar", "Temperatura pelo Vento") + # Camada 2 labs(x = "Vento (Km/h)", y = "Temperatura (Farenheit)") + # Camada 3 guides(color=guide_legend(title="Mês")) + # Camada 3 theme_classic() # Camada 4 ``` --- class: # Mão na massa #### Temas | Clássico <img src="index_files/figure-html/unnamed-chunk-32-1.png" width="50%" style="display: block; margin: auto;" /> --- class: # Mão na massa #### Temas | Clássico / Tamanho da fonte ```r ggplot(data = airquality) + geom_point(mapping = aes(x = Wind, y = Temp, color = factor(Month)), size = 3) + # Camada 1 ggtitle("Qualidade do ar", "Temperatura pelo Vento") + # Camada 2 labs(x = "Vento (Km/h)", y = "Temperatura (Farenheit)") + # Camada 3 guides(color=guide_legend(title="Mês")) + # Camada 3 theme_classic(16) # Camada 4 ``` --- class: # Mão na massa #### Temas | Clássico / Tamanho da fonte <img src="index_files/figure-html/unnamed-chunk-34-1.png" width="50%" style="display: block; margin: auto;" /> --- class: # Mão na massa #### Temas - Alterar temas dos gráficos: `theme_()`. - Muitos temas! *Tema escuro* ```r ggplot(data = airquality) + geom_point(mapping = aes(x = Wind, y = Temp, color = factor(Month)), size = 3) + # Camada 1 ggtitle("Qualidade do ar", "Temperatura pelo Vento") + # Camada 2 labs(x = "Vento (Km/h)", y = "Temperatura (Farenheit)") + # Camada 3 guides(color=guide_legend(title="Mês")) + # Camada 3 theme_dark(16) # Camada 4 ``` --- class: # Mão na massa #### Temas | Escuro <img src="index_files/figure-html/unnamed-chunk-36-1.png" width="50%" style="display: block; margin: auto;" /> --- class: # Mão na massa #### Temas - Alterar temas dos gráficos: `theme_()`. - Muitos temas! *Tema mínimo* ```r ggplot(data = airquality) + geom_point(mapping = aes(x = Wind, y = Temp, color = factor(Month)), size = 3) + # Camada 1 ggtitle("Qualidade do ar", "Temperatura pelo Vento") + # Camada 2 labs(x = "Vento (Km/h)", y = "Temperatura (Farenheit)") + # Camada 3 guides(color=guide_legend(title="Mês")) + # Camada 3 theme_minimal(16) # Camada 4 ``` --- class: # Mão na massa #### Temas | Mínimo <img src="index_files/figure-html/unnamed-chunk-38-1.png" width="50%" style="display: block; margin: auto;" /> --- class: # Dica - [Cheatsheets RStudio](https://www.rstudio.com/resources/cheatsheets/) <img src="img/cheatsheet_ggplot.png" width="75%" style="display: block; margin: auto;" /> --- class: center, middle, inverse # Perguntas --- class: center, middle, inverse # Obrigada <3