Neste post eu crio diversos gráficos das TOP 10 ações com maior volume financeiro negociadas na BM&FBovespa.
Para isso eu uso o pacote rbmfbovespa para ler o arquivo BDIN
com as informações diárias do mercado a vista da BM&FBovespa.
Este arquivo possui uma sessão com as ações mais negociadas no mercado a vista e traz informações de volume, quantidade de negócios e quantidade de contratos negociados.
Abaixo segue o código que carrega os dados e cria o gráfico usando o tema light. Neste gráfico as barras estão ordenadas de acordo com os códigos das ações que estão em ordem alfabética.
library(dplyr)
library(ggplot2)
library(rbmfbovespa)
bdin <- read_marketdata('datasets/BDIN-2015-11-19.txt', template='BDIN')
top <- bdin[["As Mais Negociadas no Mercado a Vista"]] %>%
rename(code = cod_negociacao,
volume = volume_titulos_negociados)
ggplot(top, aes(x=code, y=volume, fill=code)) +
geom_bar(stat='identity') +
labs(x=NULL, y='Vol.') +
guides(fill=FALSE) +
theme_light()
No entanto é interessante analisar estes dados de forma ordenada pela variável em questão, neste caso o volume.
Um forma de fazer isso no R é criar um fator ordenado (tipo ordered
) e essa ordem é utilizada pelo ggplot na construção do gráfico.
Para criar um fator ordenado eu preciso criar um factor
com os níveis (levels
) ordenados e definir o argumento ordered=TRUE
.
# obter a ordenação do volume
idx <- order(top$volume, decreasing = TRUE)
# criar os níveis ordenados
levels <- top$code[idx]
# criar um factor com níveis ordenados
top$code <- factor(top$code, levels=levels, ordered=TRUE)
top$code
## [1] ITUB4 PETR4 ITSA4 BBDC4 CIEL3 ABEV3 BBAS3 VALE5 BVMF3 KROT3
## 10 Levels: ITUB4 < PETR4 < ITSA4 < BBDC4 < CIEL3 < ABEV3 < ... < KROT3
class(top$code)
## [1] "ordered" "factor"
Note que os níveis estão dispostos em ordem ITUB4 < PETR4 < ITSA4 < BBDC4 < CIEL3 < ABEV3 < ... < KROT3
, indicando a ordenação definida e a classe ordered
é uma generalização de factor
.
Ordenados os códigos eu posso construir o gráfico da mesma maneira.
ggplot(top, aes(x=code, y=volume, fill=code)) +
geom_bar(stat='identity') +
labs(x=NULL, y='Vol.') +
guides(fill=FALSE) +
theme_light()