Criando boxplots apresentáveis no R [Portuguese text]

Aprenda a gerar múltiplos boxplots e a organizá-los em uma única figura de alta qualidade.

Neste tutorial você aprenderá a gerar múltiplos boxplots e a organizá-los em uma única figura de alta qualidade.

Esta postagem foi inteiramente produzida em ambiente R Studio, usando os pacotes rmarkdown (Allaire et al. 2021; Xie, Allaire, and Grolemund 2018; Xie, Dervieux, and Riederer 2020), rmdformats (Barnier 2021), remedy (Fay, Sidi, and Smith 2018), knitr (Xie 2014, 2015, 2021) e citr (Aust 2019).

1. Instalação dos pacotes necessários

Antes de iniciarmos, é importante que você tenha os seguintes pacotes e dependências instalados:

  • ggplot2 (Wickham 2016)
  • viridis (Garnier 2018)
  • hrbrthemes (Rudis 2020)
  • ggpubr (Kassambara 2020)
#instala os pacotes, se for necessário:
pacotes = c("ggplot2","viridis","hrbrthemes","ggpubr")
for (p in setdiff(pacotes, installed.packages()[,"Package"])) {install.packages(p, dependencies=TRUE)}

2. Checando e preparando os dados

Aqui, vamos usar como exemplo o Iris Dataset (Anderson 1935), que consiste em um data.frame com 150 observações (linhas) e 5 variáveis (colunas). Este famoso conjunto de dados fornece as medidas em centímetros das variáveis denominadas Sepal.Length, Sepal.Width, Petal.Length, Petal.Width e Species, respectivamente, para 50 flores de cada espécie de Iris (I. setosa, I. versicolor e I. virginica).

data("iris") #carrega o iris dataset
head(iris) #checa o topo dos dados
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1          5.1         3.5          1.4         0.2  setosa
## 2          4.9         3.0          1.4         0.2  setosa
## 3          4.7         3.2          1.3         0.2  setosa
## 4          4.6         3.1          1.5         0.2  setosa
## 5          5.0         3.6          1.4         0.2  setosa
## 6          5.4         3.9          1.7         0.4  setosa
str(iris) #checa a estrutura dos dados
## 'data.frame':    150 obs. of  5 variables:
##  $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
##  $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
##  $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
##  $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
##  $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
summary(iris) #resume os dados
##   Sepal.Length    Sepal.Width     Petal.Length    Petal.Width   
##  Min.   :4.300   Min.   :2.000   Min.   :1.000   Min.   :0.100  
##  1st Qu.:5.100   1st Qu.:2.800   1st Qu.:1.600   1st Qu.:0.300  
##  Median :5.800   Median :3.000   Median :4.350   Median :1.300  
##  Mean   :5.843   Mean   :3.057   Mean   :3.758   Mean   :1.199  
##  3rd Qu.:6.400   3rd Qu.:3.300   3rd Qu.:5.100   3rd Qu.:1.800  
##  Max.   :7.900   Max.   :4.400   Max.   :6.900   Max.   :2.500  
##        Species  
##  setosa    :50  
##  versicolor:50  
##  virginica :50  
##                 
##                 
## 
#cria subconjuntos para cada variável
CompSepal = data.frame(Especies=iris$Species, CompSepal=iris$Sepal.Length)
LargSepal = data.frame(Especies=iris$Species, LargSepal=iris$Sepal.Width)
CompPetal = data.frame(Especies=iris$Species, CompPetal=iris$Petal.Length)
LargPetal = data.frame(Especies=iris$Species, LargPetal=iris$Petal.Width)

#cria uma lista contendo os subconjuntos de dados
listaVariaveis = list(CompSepal=CompSepal, 
                      LargSepal=LargSepal, 
                      CompPetal=CompPetal, 
                      LargPetal=LargPetal)

#cria um objeto que contenha os nomes das variáveis para usar no eixo Y de cada plot
nomesVariaveis = c("Comprimento da sépala (cm)", 
                   "Largura da sépala (cm)", 
                   "Comprimento da pétala (cm)", 
                   "Largura da pétala (cm)")

3. Loop for para gerar os boxplots

library("ggplot2") #para plotar os gráficos
library("viridis") #paleta de cores
library("hrbrthemes") #theme_ipsum()

#cria um objeto do tipo vetor para armazenar os resultados gerados
resultadoPlots = vector(mode="list", length=length(listaVariaveis))
#gera o plot de cada variável (em subconjunto) dentro de um loop
for(i in 1:length(listaVariaveis)){ 
    resultadoPlots[[i]] = ggplot(listaVariaveis[[i]],
                          #veja também aes() em vez de aes_string()
                          aes_string(x=names(listaVariaveis[[i]][1]), #pega a coluna que corresponde aos nomes das spp em cada subconjunto 
                                     y=names(listaVariaveis[[i]][2]), #pega a coluna que corresponde aos nomes das variáveis em cada subconjunto 
                                     fill=names(listaVariaveis[[i]][1]))) + #define as cores por spp
    geom_boxplot() +
    scale_fill_viridis(discrete=TRUE, alpha=0.6) +
    geom_jitter(color="black", size=0.4, alpha=0.9) +
    theme_ipsum() +
    theme(legend.position="none", 
          axis.title.x=element_text(size=12), 
          axis.title.y=element_text(size=12), 
          axis.text=element_text(size=10),
          axis.text.x=element_text(face="italic")) + #para que os nomes no eixo X fiquem em itálico
    xlab("Iris spp.") +
    ylab(nomesVariaveis[i])
    print(resultadoPlots[[i]]) #para ver o resultado
}

4. Plota os boxplots em uma única figura

5. Salva a figura em um arquivo .tiff de alta qualidade

ggsave("FiguraBoxplots.tiff", plot=figuraBoxplots, 
       width=22, height=20, units="cm", dpi=300, compression="lzw") #define os parâmetros da imagem

Postagem originalmente publicada no meu perfil do RPubs. Toda semana tem conteúdo novo por lá!

Até a próxima!

Referências

Allaire, JJ, Yihui Xie, Jonathan McPherson, Javier Luraschi, Kevin Ushey, Aron Atkins, Hadley Wickham, Joe Cheng, Winston Chang, and Richard Iannone. 2021. Rmarkdown: Dynamic Documents for R. https://github.com/rstudio/rmarkdown.

Anderson, Edgar. 1935. “The Irises of the Gaspe Peninsula.” Bulletin of the American Iris Society 59: 2–5.

Aust, Frederik. 2019. Citr: ’RStudio’ Add-in to Insert Markdown Citations. https://github.com/crsh/citr.

Barnier, Julien. 2021. Rmdformats: HTML Output Formats and Templates for ’Rmarkdown’ Documents. https://CRAN.R-project.org/package=rmdformats.

Fay, Colin, Jonathan Sidi, and Luke Smith. 2018. Remedy: ’RStudio’ Addins to Simplify ’Markdown’ Writing. https://CRAN.R-project.org/package=remedy.

Garnier, Simon. 2018. Viridis: Default Color Maps from ’Matplotlib’. https://CRAN.R-project.org/package=viridis.

Kassambara, Alboukadel. 2020. Ggpubr: ’Ggplot2’ Based Publication Ready Plots. https://CRAN.R-project.org/package=ggpubr.

Rudis, Bob. 2020. Hrbrthemes: Additional Themes, Theme Components and Utilities for ’Ggplot2’. https://CRAN.R-project.org/package=hrbrthemes.

Wickham, Hadley. 2016. Ggplot2: Elegant Graphics for Data Analysis. Springer-Verlag New York. https://ggplot2.tidyverse.org.

Xie, Yihui. 2014. “Knitr: A Comprehensive Tool for Reproducible Research in R.” In Implementing Reproducible Computational Research, edited by Victoria Stodden, Friedrich Leisch, and Roger D. Peng. Chapman; Hall/CRC. http://www.crcpress.com/product/isbn/9781466561595.

———. 2015. Dynamic Documents with R and Knitr. 2nd ed. Boca Raton, Florida: Chapman; Hall/CRC. https://yihui.org/knitr/.

———. 2021. Knitr: A General-Purpose Package for Dynamic Report Generation in R. https://yihui.org/knitr/.

Xie, Yihui, J. J. Allaire, and Garrett Grolemund. 2018. R Markdown: The Definitive Guide. Boca Raton, Florida: Chapman; Hall/CRC. https://bookdown.org/yihui/rmarkdown.

Xie, Yihui, Christophe Dervieux, and Emily Riederer. 2020. R Markdown Cookbook. Boca Raton, Florida: Chapman; Hall/CRC. https://bookdown.org/yihui/rmarkdown-cookbook.

Caroline C. Vasconcelos
Caroline C. Vasconcelos
Doutoranda em Botânica

Meus interesses de pesquisa incluem taxonomia e sistemática (especialmente Sapotaceae neotropical); espectroscopia como ferramenta integrativa; flora amazônica; modelagem de distribuição de espécies; estudos florísticos; e ecologia de florestas tropicais.

comments powered by Disqus

Relacionados