No Gráfico de barras no ggplot com características ordenadas eu mostrou como criar um gráfico de barras no ggplot
utilizando dados categóricos (factor
) ordenados.
No último ano a equipe do RStudio apresentou à comunidade R o pacote forcats,
que lida com variáveis categóricas apresentando diversas funções para a criação, ordenação, mudança de níveis e
muito mais operações com variáveis categóricas.
Quem trabalha com R está acostumado a lidar com variáveis categóricas, variáveis do tipo factor
.
O objetivo aqui não é explicar variáveis categóricas (uma boa referência é o site do forcats), e sim apresentar
uma proposta alternativa ao post, onde utilizo a ordenação de variáveis
categóricas para obter o gráfico em barras no ggplot com as barras ordenadas.
No caso, o gráfico era de volume de negociação das ações TOP 10 da data 19/nov/2015, e sem a ordenação das variáveis
categóricas as colunas aparecem ordenadas pelos nomes das empresas, dificultando a visualização das TOP 10 em volume negociado.
A proposta alternativa que será apresentada neste post utiliza o pacote forcats para fazer a ordenação das
variáveis categóricas.
Vou começar reproduzindo o código do post original, carregando os pacotes.
library(dplyr)
library(ggplot2)
library(rbmfbovespa)
Na sequência carrego o arquivo BDIN referente a data 19/nov/2015.
bdin <- read_marketdata('datasets/BDIN-2015-11-19.txt', template='BDIN')
bdin
## Part 1: Header [1 obs. of 9 variables]
## Part 2: Resumo Diário dos Índices [23 obs. of 38 variables]
## Part 3: Resumo Diário de Negociações por Papel [2929 obs. of 35 variables]
## Part 4: Resumo Diário de Negociações por Código BDI [15 obs. of 8 variables]
## Part 5: Maiores Oscilações do Mercado a Vista [20 obs. of 10 variables]
## Part 6: Maiores Oscilação das Ações do IBOVESPA [20 obs. of 10 variables]
## Part 7: As Mais Negociadas no Mercado a Vista [10 obs. of 7 variables]
## Part 8: As Mais Negociadas [30 obs. of 16 variables]
## Part 9: Resumo Diário dos IOPV's [15 obs. of 13 variables]
## Part 10: BDR's Não Patrocinadas - Valor de Referência [84 obs. of 6 variables]
## Part 11: Trailer [1 obs. of 8 variables]
Note que a sétima parte do arquivo (Part 7) traz as ações mais negociadas no mercado a vista. Agora é selecionar a sétima parte e criar o gráfico em barras com ggplot2.
top <- bdin[[7]]
ggplot(data=top,
aes(x = cod_negociacao,
y = volume_titulos_negociados,
fill = cod_negociacao)) +
geom_bar(stat = 'identity') +
labs(x = NULL, y = 'Vol.') +
guides(fill = FALSE) +
theme_light()
Neste gráfico as barras aparecem embaralhadas (ordenadas pelos códigos de negociação das empresas).
Vou importar o pacote forcats
e utilizar a função fct_reorder
para fazer a ordenação.
A função fct_reorder
ordena a variável cod_negociacao
de acordo com a variável volume_titulos_negociados
,
em ordem descrescente (com .desc = TRUE
) porque o objetivo é colocar a maior barra a esquerda do gráfico.
library(forcats)
ggplot(data = top,
aes(x = fct_reorder(cod_negociacao, volume_titulos_negociados, .desc = TRUE),
y = volume_titulos_negociados,
fill = cod_negociacao)) +
geom_bar(stat = 'identity') +
labs(x = NULL, y = 'Vol.') +
guides(fill = FALSE) +
theme_light()
A função fct_reorder
ajuda porque deixa o código mais limpo comunicando explicitamente o que se pretende fazer.
Por esse motivo é relevante o uso das funções do pacote forcats e diversas outras presentes no tidyverse.
O objetivo de programar não é apenas resolver ver os problemas, é também comunicar o que se deseja fazer ou como
fazer.