Considero que fazer gráficos no R com ggplot é melhor por dois aspectos:
- mudança de mentalidade na construção do gráfico: colocar foco nas variáveis e suas relações ao invés de focar em coordenadas. As variáveis aestéticas permitem explorar as relações entre as variáveis já na construção do
data.frame
evitando construções algorítmicas na criação do gráfico. - gráficos visualmente mais agradáveis, sem configuração adicional, afinal visualização deve ser agradável para que a informação seja absorvida da melhor forma possível.
Um característica do ggplot que acho interessante é o seu conjunto de temas pré-definidos. Há outros pacotes que definem novos temas (como o ggthemes) ou que ajudam na configuração de temas (como o cowplot). No entanto, aqui eu quero focar apenas nos temas que já vem com o ggplot, são 9 temas.
Vou fazer um gráfico dos TOP 10 papéis mais negociados na BM&FBovespa em cada um dos temas do ggplot. Adicionalmente vou dispor os gráficos em um grid para melhorar a comparação e para fazer isso eu vou usar o cowplot, que como eu disse tem algumas funcionalidades que ajudam criação dos gráficos e colocar os gráficos em grid é uma delas.
Recentemente eu lancei o pacote rbmfbovespa que lê os arquivos distribuídos pela BM&FBovespa.
Vou utilizá-lo para ler o arquivo BDIN
de dados diários do mercados de ações.
library(dplyr)
library(rbmfbovespa)
ext_rename <- function(x, ...) {
idx <- list(...)
x <- x[,names(idx)]
names(x) <- unname(unlist(idx))
x
}
bdin_2015 <- read_marketdata('datasets/BDIN-2015-11-19.txt', template='BDIN')
top <- bdin_2015[["As Mais Negociadas no Mercado a Vista"]] %>%
ext_rename('cod_negociacao'='code',
'volume_titulos_negociados'='volume')
top %>% top_n(5)
## code volume
## 1 ITUB4 553419909
## 2 PETR4 395648591
## 3 ITSA4 294250142
## 4 BBDC4 288959359
## 5 CIEL3 256340295
Carregados os dados, eu crio um gráfico de barras com os volumes financeiros negociados pelo código dos papéis.
library(ggplot2)
p <- ggplot(top, aes(x=code, y=volume, fill=code)) +
geom_bar(stat='identity') +
labs(x=NULL, y='Vol.') +
guides(fill=FALSE)
Agora utilizando cowplot
e crio um grid 5x2 apresentando o gráfico em cada um dos temas do ggplot e adicionalmente no tema do cowplot
.
library(cowplot)
plot_grid(p, p + theme_bw(), p + theme_grey(), p + theme_gray(), p + theme_linedraw(), p + theme_light(), p + theme_minimal(), p + theme_classic(), p + theme_dark(),
labels = c("cowplot", "bw", "gray", "grey", "linedraw", "light", "minimal", "classic", "dark"),
nrow = 3, align = "h", hjust = 0, vjust = 1, label_size = 10)
theme_gray
é o tema default do ggplot, e francamente não vejo diferenção para o theme_grey
(talvez seja uma forma de evitar erros por variações linguísticas).
O tema padrão já é legal e a paleta de cores padrão também é bem interessante e esse é um dos fatores citados para a adoção do ggplot.
Obviamente eu posso construír gráficos assim com o pacote graphics
do R, no entanto seriam necessárias diversas linhas de código complicado para obter o mesmo look-and-feel.
No link há formas de configurar novas paletas de cores e orientações para criar sua própria paleta.
O tema padrão já é interessante, mas segue um especial destaque para os temas:
bw
: tema mais próximo do que eu estou acostumado a ver.light
: look-and-feel agradável.minimal
: algo mais próximo de gráficos de jornal.void
: com esse tema é possível começar quase do zero na criação de um gráfico adicionando características evitando conflito com definições de outros temas.