4 Barras

4.1 Dados

Aqui serão usados os dados de exportações e importações brasileiras anuais de 1989 a 2016.

4.2 Criando a visualização

library(dplyr)
library(D3plusR)

dados <- read.csv('dados/exp_imp_brasil.csv')

d3plus(data = dados %>% filter(CO_ANO >= 2005),
       type = "bar",
       id = "TIPO",
       width = "100%",
       height = 500, 
       locale = "pt_BR") %>% 
  d3plusX(value = "CO_ANO", label = "Ano") %>% 
  d3plusY(value = "VL_FOB", label = "Valor FOB")

Alguns pontos que devem ser ressaltados do gráfico acima:

  1. o D3plus automaicamente aplica uma formação para os números, incluindo símbolos para Bilhões, milhões e milhares;
  2. perceba que a ordem das barras não é respeitada, sempre o menos valor vem primeiro.

O primeiro problema pode ser resolvido com os argumentos number_text, currency, currency_var, percent_var e noformat_number_var. Basicamente, iremos dizer quais são os textos que devem aparecer para bilhões, milhões e milhares. currency define o símbolo da moeda que desejamos adiconar antes do número das variáveis que definirmos como variáveis de moeda, currency_var indica o nome das variáveis de moeda, percent_var indica o nome das variáveis que são percentuais e noformat_number_var indica quais variáveis devem apresentar o número na sua forma original.

d3plus(data = dados %>% filter(CO_ANO >= 2005),
       type = "bar",
       id = "TIPO",
       width = "100%",
       height = 500, 
       locale = "pt_BR",
       currency = "US$",
       number_text = c("Mil", "Milhão", "Milhões", "Bilhão", "Bilhões"),
       currency_var = "VL_FOB",
       noformat_number_var = "CO_ANO") %>%
  d3plusX(value = "CO_ANO", grid = FALSE,
          persist = list(position = TRUE)) %>% 
  d3plusY(value = "VL_FOB", grid = TRUE) %>% 
  d3plusAxes(ticks = FALSE, background = list(color = "#FFFFFF", stroke = list(width = 0)))

4.3 Adicionando outros elementos

d3plus(data = dados %>% filter(CO_ANO >= 2005),
       type = "bar",
       id = "TIPO",
       width = "100%",
       height = 500, 
       locale = "pt_BR",
       currency = "US$",
       number_text = c("Mil", "Milhão", "Milhões", "Bilhão", "Bilhões"),
       currency_var = "VL_FOB",
       noformat_number_var = "CO_ANO") %>%
  d3plusX(value = "CO_ANO", grid = FALSE,
          persist = list(position = TRUE)) %>% 
  d3plusY(value = "VL_FOB", grid = TRUE) %>% 
  d3plusAxes(ticks = FALSE,
             background = list(color = "#FFFFFF", stroke = list(width = 0))) %>% 
  d3plusTime("CO_ANO") %>% 
  d3plusTooltip(c("CO_ANO", "VL_FOB")) %>% 
  d3plusColor("TIPO", scale = c("#3C8BE6", "#6E8749")) %>% 
  d3plusLegend(value = TRUE, data = FALSE) 

Para que a ordem das barras guarde correspondência com a ordem que aparece nos dados, é preciso que a variável responsável pelo eixo x seja do tipo character.

dados$CO_ANO <- as.character(dados$CO_ANO)
dados$TIPO <- as.character(dados$TIPO)
d3plus(data = dados %>% filter(CO_ANO >= 2005),
       type = "bar",
       id = "TIPO",
       width = "100%",
       height = 500, 
       locale = "pt_BR",
       currency = "US$",
       number_text = c("Mil", "Milhão", "Milhões", "Bilhão", "Bilhões"),
       currency_var = "VL_FOB",
       noformat_number_var = "CO_ANO") %>%
  d3plusX(value = "CO_ANO", grid = FALSE,
          persist = list(position = TRUE)) %>% 
  d3plusY(value = "VL_FOB", grid = TRUE) %>% 
  d3plusAxes(ticks = FALSE,
             background = list(color = "#FFFFFF", stroke = list(width = 0))) %>% 
  d3plusTime("CO_ANO") %>% 
  d3plusTooltip(c("CO_ANO", "VL_FOB")) %>% 
  d3plusColor("TIPO", scale = c("#6E8749", "#3C8BE6")) %>% 
  d3plusLegend(value = TRUE, data = FALSE,
               order = list(sort = "desc"),
               size = 35)

4.4 Incluindo um dicionário

A função d3plus() tem um argumento que pode ser receber um dicionário (uma lista). Esse dicionário pode ser usado para traduzir nomes de variáveis para textos mais amigáveis, por exemplo.

dicionario <- list(VL_FOB = "Valor FOB",
                   CO_ANO = "Ano",
                   IMP = "Importações",
                   EXP = "Exportações",
                   isolar = "Selecionar",
                   ocultar = "Esconder")

d3plus(data = dados %>% filter(CO_ANO >= 2005),
       type = "bar",
       id = "TIPO",
       width = "100%",
       height = 500, 
       locale = "pt_BR",
       currency = "US$",
       number_text = c("Mil", "Milhão", "Milhões", "Bilhão", "Bilhões"),
       currency_var = "VL_FOB",
       noformat_number_var = "CO_ANO",
       dictionary = dicionario) %>%
  d3plusX(value = "CO_ANO", grid = FALSE,
          persist = list(position = TRUE)) %>% 
  d3plusY(value = "VL_FOB", grid = TRUE) %>% 
  d3plusAxes(ticks = FALSE,
             background = list(color = "#FFFFFF", stroke = list(width = 0))) %>% 
  d3plusTime("CO_ANO") %>% 
  d3plusTooltip(c("CO_ANO", "VL_FOB")) %>% 
  d3plusColor("TIPO", scale = c("#6E8749", "#3C8BE6")) %>% 
  d3plusLegend(value = TRUE, data = FALSE,
               order = list(value = "id", sort = "asc"),
               size = 35)

4.5 Estrutura Hierárquica

O usuário pode especificar mais de um nível no id. Assim, a visualização criada apresentará os dados no primeiro nível e abrirá o segundo nível a partir de um clique. O nível inicial pode ser escolhido a partir da função d3plusDepth() (sendo o valor 0 para o primerio nível).

bra_chn_fat <- read.csv2('dados/chn_anual_fat.csv', encoding = "latin1")
bra_chn_fat$CO_ANO <- as.character(bra_chn_fat$CO_ANO)
head(bra_chn_fat)
##          TIPO CO_ANO NO_PAIS               NO_FAT_AGREG     VL_FOB
## 1 EXPORTAÇÕES   2006   China        Operações Especiais   34334619
## 2 EXPORTAÇÕES   2006   China           Produtos Básicos 6213222707
## 3 EXPORTAÇÕES   2006   China     Produtos Manufaturados  879401653
## 4 EXPORTAÇÕES   2006   China Produtos Semimanufaturados 1275409848
## 5 EXPORTAÇÕES   2007   China        Operações Especiais   17476098
## 6 EXPORTAÇÕES   2007   China           Produtos Básicos 7927295420
##     KG_LIQUIDO
## 1       138332
## 2  95568324143
## 3    507473057
## 4   1911374028
## 5       172164
## 6 118401572919
d3plus(bra_chn_fat, type = "bar", id = c("TIPO", "NO_FAT_AGREG"),
       width = "100%",
       height = 500) %>% 
  d3plusX(value = "CO_ANO", grid = FALSE, 
          persist = list(position = TRUE)) %>% 
  d3plusY(value = "VL_FOB", grid = TRUE, stacked = c(TRUE, FALSE)) %>% 
  d3plusDepth(0)