Semana 3

Manipulação e visualização de dados no R

Marina Scalon

6/5/24

Objetivos e Resultados

A gramática dos gráficos

  • Definição de gráficos: mapeamento de dados a partir de atributos estéticos de objetos geométricos

  • A gramática em camadas de um gráfico: conceito desenvolvido pelo criador do ggplot2, que divide os componentes de um gráfico em diferentes camadas.

Vantagens do ggplot2

  • Estética
  • Facilidade de customização
  • Estrutura padronizada com aprendizado mais intuitivo
  • Códigos (scripts) mais limpos – menos linhas!

Exemplo da vida real!

Comparação Rbase vs. ggplot

b<-read.csv("exemplo.csv")

#pdf(filename="Figure1.pdf",width=14.9,height=8.7)
par(mfrow=c(2,3), tcl=-0.5, family="serif")
par(oma=c(1,1,1,1))
par(mgp=c(3,1,0))
par(mar=c(2.5,5,1,0))

boxplot(b$N~b$age*b$loc,
        las=2, at=c(1,2,4,5,7,8),
        log="y",
        cex.axis=1, cex.lab=1,
        xaxt="n",
        ylim=c(0.2, 3.5),
        ylab=expression(paste("N"[mass]," (%)")),
        col=c("gray", "White"))
axis(1,at=c(1.5,4.5,7.5),labels=c("", "", ""), cex.axis=1)
text(8, 3,"N", cex=1.2)
legend("bottomleft", c("Green","Senescent"),
       fill=c("gray", "white"), cex=1, bty="n")

boxplot(b$P~b$age*b$loc,
        las=2, at=c(1,2,4,5,7,8),
        cex.axis=1, cex.lab=1,
        xaxt="n",
        log="y",
        ylim=c(0.02, 0.3),
        ylab=expression(paste("P"[mass]," (%)")),
        col=c("gray", "White"))
axis(1,at=c(1.5,4.5,7.5),labels=c(" ", " ", " "), cex.axis=1)
text(8, 0.25,"P", cex=1.2)
text(1.5, 0.18,"*", cex=1.5)
text(4.5, 0.18,"*", cex=1.5)
text(7.5, 0.15,"*", cex=1.5)

boxplot(b$SLA~b$age*b$loc,
        las=2, at=c(1,2,4,5,7,8),
        log="y",
        cex.axis=1, cex.lab=1,
        xaxt="n",
        ylim=c(20, 80),
        ylab=expression(paste("log SLA (", cm^2, g^-1,")")),
        col=c("gray", "White"))
axis(1,at=c(1.5,4.5,7.5),labels=c("", "", ""), cex.axis=1)
text(7, 75,"SLA", cex=1.2)

par(mar=c(3.5,5,0,0))

boxplot(b$K~b$age*b$loc,
        las=2, at=c(1,2,4,5,7,8),
        log="y",
        cex.axis=1, cex.lab=1,
        xaxt="n",
        ylim=c(0.2, 4),
        ylab=expression(paste("K"[mass]," (%)")),
        col=c("gray", "White"))
axis(1,at=c(1.5,4.5,7.5),labels=c("Bra.Sav", "Aus.Sav", "Aus.Woo"), cex.axis=0.8)
text(8, 3.5,"K", cex=1.2)
text(4.5, 2,"*", cex=1.5)

boxplot(b$Ca~b$age*b$loc,
        las=2, at=c(1,2,4,5,7,8),
        log="y",
        cex.axis=1, cex.lab=1,
        xaxt="n",
        ylim=c(0.2, 3.5),
        ylab=expression(paste("Ca"[mass]," (%)")),
        col=c("gray", "White"))
axis(1,at=c(1.5,4.5,7.5),labels=c("Bra.Sav", "Aus.Sav", "Aus.Woo"), cex.axis=0.8)
text(8, 3,"Ca", cex=1.2)

boxplot(b$Mg~b$age*b$loc,
        las=2, at=c(1,2,4,5,7,8),
        log="y",
        cex.axis=1, cex.lab=1,
        xaxt="n",
        ylim=c(0.1, 1),
        ylab=expression(paste("Mg"[mass]," (%)")),
        col=c("gray", "White"))
axis(1,at=c(1.5,4.5,7.5),labels=c("Bra.Sav", "Aus.Sav", "Aus.Woo"), cex.axis=0.8)
text(8, 0.8,"Mg", cex=1.2)

#dev.off()
a <- b %>% gather("nutri", "value", 4:9)
ggplot(a, aes(x=loc, y=value, fill=age)) +
  facet_wrap(~nutri, nrow=2, scale="free_y")+
  geom_boxplot()+ labs(x= " ", y=" ")+
  scale_fill_manual(values=c("white", "lightgray"))+
  scale_x_discrete(labels = c("Bra.Sav", "Aus.Sav", "Aus.Woo"))+
  guides(fill="none")+theme_bw()

#ggsave("Figure1_ggplot.pdf", g, width=30, height=15, units = c("cm"))

ggplot2

https://ggplot2.tidyverse.org/

Data visualization CHEATSHEET!

ggplot2

  • Primeira camada começa com ‘ggplot()’
    • raras excessões
  • Demais camadas são adicionadas por “+”
  • aes() descreve o mapeamento nos aspectos visuais (aesthetics)
  • ggplot() +
    • geom_point()
    • ggeom_line()
    • geom_bar()
    • geom_histogram()
    • geom_abline()
    • geom_boxplot()
    • geom_density()

Customizações comuns

  • color: para pontos e linhas
  • fill: para barras e boxplots
  • size: tamanho dos símbolos, linhas, caixas, barras, etc
  • shape: tipo dos pontos
  • linetype: tipo das linhas
  • facet_wrap/ facet_grid: divide em facetas para visualizar melhor

Customizações necessárias

  • Modificar as cores
  • Modificar o nome dos eixos
  • Modificar escala
  • Modificar o fundo (linhas de grade)
  • Modificar legenda
  • Inserir símbolos (por exemplo letras, asteriscos, etc. para mostrar diferenças estatísticas)

Painéis e Output

  • Tipos de arquivos

  • PDF vs. JPEG vs. TIFF, etc…

  • Sempre prefira PDF!

  • Usar pacote gridExtra para arranjo de painéis com a função grid.arrange()

  • Para painéis complexos: pacotes egg e ggpubr

BORA PRO R!