logo

Vamos explorar alguns aspectos adicionais dos gráficos de barra, como a mudança nos nomes das classes e a reorganização das barras.

1 Carregando a base de dados

library(tidyverse)
library(readxl)
msleep <- read_excel("dados/msleep.xlsx")
glimpse(msleep)
## Rows: 83
## Columns: 11
## $ name         <chr> "Cheetah", "Owl monkey", "Mountain beaver", "Greater shor…
## $ genus        <chr> "Acinonyx", "Aotus", "Aplodontia", "Blarina", "Bos", "Bra…
## $ vore         <chr> "carni", "omni", "herbi", "omni", "herbi", "herbi", "carn…
## $ order        <chr> "Carnivora", "Primates", "Rodentia", "Soricomorpha", "Art…
## $ conservation <chr> "lc", NA, "nt", "lc", "domesticated", NA, "vu", NA, "dome…
## $ sleep_total  <dbl> 12.1, 17.0, 14.4, 14.9, 4.0, 14.4, 8.7, 7.0, 10.1, 3.0, 5…
## $ sleep_rem    <dbl> NA, 1.8, 2.4, 2.3, 0.7, 2.2, 1.4, NA, 2.9, NA, 0.6, 0.8, …
## $ sleep_cycle  <dbl> NA, NA, NA, 0.1333333, 0.6666667, 0.7666667, 0.3833333, N…
## $ awake        <dbl> 11.9, 7.0, 9.6, 9.1, 20.0, 9.6, 15.3, 17.0, 13.9, 21.0, 1…
## $ brainwt      <dbl> NA, 0.01550, NA, 0.00029, 0.42300, NA, NA, NA, 0.07000, 0…
## $ bodywt       <dbl> 50.000, 0.480, 1.350, 0.019, 600.000, 3.850, 20.490, 0.04…

2 Alterando o nome das classes

Aqui, fazemos uma cópia da base de dados original msleep para msleep2 para não alterar a base de dados original.

msleep2 <- msleep
  • Checamos a classe da variável vore:
class(msleep2$vore)
## [1] "character"
  • Temos a classe character e vamos transformar em fator, mas é importante checar a ordem em que os fatores estarão presente na base de dados:
msleep2$vore <- factor(msleep2$vore)  # transformando em fator
levels(msleep2$vore) # checando os níveis do fator
## [1] "carni"   "herbi"   "insecti" "omni"

Teremos que renomear na mesma ordem:

msleep2$vore <- factor(msleep2$vore, 
                       labels  = c("Carnívoros",
                                  "Herbívoros",
                                  "Insectívoros",
                                  "Omnívoros"))
  • Checando se a transformação deu certo e comparando com a base de dados original:
table(msleep2$vore)
## 
##   Carnívoros   Herbívoros Insectívoros    Omnívoros 
##           19           32            5           20
table(msleep$vore)
## 
##   carni   herbi insecti    omni 
##      19      32       5      20

Vemos que os nomes foram alterados e não foram trocados de posição. Agora é só prosseguir com a cosntrução do gráfico de barras, lembrando que agora vamos usar a base de dados msleep2:

msleep2 %>% 
  filter(!is.na(vore)) %>% 
  ggplot(aes(x = vore)) +
  geom_bar(color = "black", fill = "#0086b3") +
  labs(title = "Alimentação",
      subtitle = "base de dados msleep",
      x = "Tipo de alimentação",
      y = "Frequência") +
  theme_linedraw() 

# Salvando a figura
ggsave("boxplot_alimentacao.png",
       width = 10,
       height = 10,
       units = "cm")

3 Ordenando as barras da maior para menor

  • Se quisermos colocar as barras em ordem de frequência, temos que contar a quantidade de cada uma das classes da variável vore, e vamos salvar esta informação numa nova base de dados chamada alimentacao:
alimentacao <- msleep2 %>% 
  filter(!is.na(vore)) %>%  # filtra para excluir os NAs
  group_by(vore) %>%        # agrupa por vore/alimentação
  count()                   # contagem de cada classe

alimentacao
## # A tibble: 4 x 2
## # Groups:   vore [4]
##   vore             n
##   <fct>        <int>
## 1 Carnívoros      19
## 2 Herbívoros      32
## 3 Insectívoros     5
## 4 Omnívoros       20
  • Agora vamos refazer o gráfico de barras usando a base de dados alimentacao:
alimentacao %>% 
  ggplot(aes(x = reorder(vore, -n, sum), y = n)) +
  geom_bar(stat="identity",  fill="#f68060", color = "black", alpha=.6) +
    labs(title = "Alimentação",
      subtitle = "base de dados msleep",
      x = "Tipo de alimentação",
      y = "Frequência") +
  theme_linedraw() 

  • aes(x = reorder(vore, -n, sum), y = n) este trecho do código nos diz para reordenar a variável vore de maneira decrescente em relação à variável n. Por padrão, a ordenação é feita em relação à média, daí devemos explicitar que queremos a ordenação pela soma (sum) das observações em cada classe.

  • Se quisermos o gráfico em ordem crescente, é só alterar o sinal de n, ao invés de -n, escrvemos somente n.

alimentacao %>% 
  ggplot(aes(x = reorder(vore, n, sum), y = n)) +
  geom_bar(stat="identity",  fill="#f68060", color = "black", alpha=.6) +
    labs(title = "Alimentação",
      subtitle = "base de dados msleep",
      x = "Tipo de alimentação",
      y = "Frequência") +
  theme_linedraw() 

  • Invertendo a orientação das barras
alimentacao %>% 
  ggplot(aes(x = reorder(vore, n, sum), y = n)) +
  geom_bar(stat="identity",  fill="#f68060", color = "black", alpha=.6) +
    labs(title = "Alimentação",
      subtitle = "base de dados msleep",
      x = "Tipo de alimentação",
      y = "Frequência") +
  theme_linedraw() +
  coord_flip()