Visualização de dados é, na minha opinião, a melhor forma de apresentar relatórios descritivos e analíticos a partir de um conjunto de dados. Eu sou do time que ama visualização. Dá para contar a história toda em uma única tela — claro, isso também depende da complexidade dos dados. Se você está lendo este tutorial, provavelmente já conhece o pacote Ggplot2 no R, usado para gerar gráficos excelentes para análise, mas que em alguns casos deixa a desejar em propriedades dinâmicas.
Voltando ao Highcharter: ele é um wrapper em R da biblioteca JavaScript HighCharts e seus módulos.
Os principais recursos deste pacote são:
Você cria vários tipos de gráficos com o mesmo estilo: dispersão, bolhas, séries temporais, heatmaps, treemaps, barras e muito mais.
Suporta diversos objetos do R.
Oferece suporte a Highstocks Charts e coropléticas.
Tem um estilo de encadeamento com pipes que todo mundo que usa R adora.
Uma grande variedade de temas com visual incrível.
Bora colocar a mão na massa e criar algumas visualizações com o Highcharter, explorando os recursos acima:
Criando gráficos básicos com a função hchart
hchart é uma função genérica que recebe um objeto e retorna um objeto highcharter. Há funções cujo comportamento é parecido com as do pacote ggplot2, como:
hchart funciona como o qplot do ggplot2.
hc_add_series funciona como os geom_S do ggplot2.
hcaes funciona como o aes do ggplot2.
Vamos escolher um dataset. Vou usar o conjunto Pokemon, que também está disponível no pacote Highcharter. Dê uma olhada rápida:
pokemon%>%
count(type_1)%>%
arrange(n)%>%
hchart(type ="treemap", hcaes(x = type_1, value = n, color = n))Tecnologia
Também podemos usar hc_add_series para montar o gráfico. Ele serve para adicionar e remover séries de um objeto highchart.
Gráfico de dispersão
highchart()%>%
hc_add_series(pokemon,"scatter", hcaes(x = height, y = weight))Tecnologia
A principal diferença entre as funções geom_ do ggplot2 e o hc_add_series é que, no Highcharter, precisamos informar os dados e as estéticas explicitamente em cada função, enquanto no ggplot2 dá para definir dados e estéticas em uma camada e depois ir adicionando geoms que usam as mesmas definições.
Um exemplo direto está abaixo, usando o dataset diamonds do pacote ggplot2.
data(diamonds, package ="ggplot2")
set.seed(123)
data <- sample_n(diamonds,300)
modlss <- loess(price ~ carat, data = data)
fit <- arrange(augment(modlss), carat)
highchart()%>%
hc_add_series(data, type ="scatter",
hcaes(x = carat, y = price, size = depth, group = cut))%>%
hc_add_series(fit, type ="line", hcaes(x = carat, y = .fitted),
name ="Fit", id ="fit")%>%
hc_add_series(fit, type ="arearange",
hcaes(x = carat, low = .fitted -2*.se.fit,
high = .fitted +2*.se.fit),
linkedTo ="fit")Tecnologia
Como no exemplo, o gráfico foi construído com três séries: dispersão, linha e faixa de área.
Vamos reproduzir um desenvolvimento em JavaScript do highchart no R usando hc_add_series.
highchart()%>%
hc_chart(type ="area")%>%
hc_title(text ="Historic and Estimated Worldwide Population Distribution by Region")%>%
hc_subtitle(text ="Source: Wikipedia.org")%>%
hc_xAxis(categories = c("1750","1800","1850","1900","1950","1999","2050"),
tickmarkPlacement ="on",
title = list(enabled =FALSE))%>%
hc_yAxis(title = list(text ="Percent"))%>%
hc_tooltip(pointFormat = "<span style=\"color:{series.color}\">{series.name}</span>:<b>{point.percentage:.1f}%</b>({point.y:,.0f} millions)<br/>",
shared =TRUE)%>%
hc_plotOptions(area = list(
stacking ="percent",
lineColor ="#ffffff",
lineWidth =1,
marker = list(
lineWidth =1,
lineColor ="#ffffff")))%>%
hc_add_series(name ="Asia", data = c(502,635,809,947,1402,3634,5268))%>%
hc_add_series(name ="Africa", data = c(106,107,111,133,221,767,1766))%>%
hc_add_series(name ="Europe", data = c(163,203,276,408,547,729,628))%>%
hc_add_series(name ="America", data = c(18,31,54,156,339,818,1201))%>%
hc_add_series(name ="Oceania", data = c(2,2,2,6,13,30,46))Tecnologia
Comparando, dá para ver cada bloco do código JavaScript convertido em funções do R, encadeadas com pipes. Vale observar alguns argumentos, como o pointFormat do hctooltip, que usa o mesmo formato do código JavaScript. Você pode ver os detalhes aqui.
Highstocks
Highstocks são gráficos para análises financeiras e de séries temporais; funcionam muito bem com a biblioteca quamtmod, e é simples plotar símbolos e depois adicionar mais séries com hc_add_series.
x <- getSymbols("GOOG", auto.assign =FALSE)
hchart(x)Tecnologia
Nesse gráfico, não precisamos acrescentar código extra: hchart trabalha muito bem com objetos xts, oferecendo um snapshot dinâmico dos dados. Use o zoom para detalhar os dados em partes menores e analisar melhor.
Vamos usar o hc_add_series.
y <- getSymbols("AMZN", auto.assign =FALSE)
highchart(type ="stock")%>%
hc_add_series(x)%>%
hc_add_series(y, type ="ohlc")Tecnologia
Perceba como a visualização lida muito bem com um volume grande de dados.
Experimente stocks com diferentes objetos xts.
Highmaps
A forma mais simples de criar um mapa no highcharter é usando a função hcmap. Selecione uma URL da coleção de highmaps e use essa URL como mapa na função hcmap. Isso vai baixar o mapa e criar um objeto usando as informações como argumento mapdata.
Esse é um mapa simples — que tal transformar em uma coroplética?
Todo mapa baixado da coleção de mapas do Highcharts traz chaves para relacionar os dados. Há duas funções que ajudam a entender quais regiões estão codificadas e como unir mapa e dados:
download_map_data: baixa os dados geojson da coleção do Highcharts.
get_data_from_map: retorna as propriedades de cada região no mapa, como as chaves do map data.
Vamos adicionar a funcionalidade de exportar dados.
pokemon%>%
count(type_1)%>%
arrange(n)%>%
hchart(type ="bar", hcaes(x = type_1, y = n, color = type_1))%>%
hc_exporting(enabled =TRUE)Tecnologia
Por fim, vamos aplicar alguns temas.
pokemon%>%
count(type_1)%>%
arrange(n)%>%
hchart(type ="bar", hcaes(x = type_1, y = n, color = type_1))%>%
hc_exporting(enabled =TRUE)%>%
hc_add_theme(hc_theme_chalk())Tecnologia
Você pode aprender muito mais aqui — é uma biblioteca completa sobre Highcharter. Para fechar, compartilho um dos meus gráficos favoritos, criado com um dataset de clima. Um argumento interessante é o polar: ao defini-lo como TRUE, a visualização muda completamente.
data("weather")
x <- c("Min","Mean","Max")
y <- sprintf("{point.%s}", c("min_temperaturec","mean_temperaturec","max_temperaturec"))
tltip <- tooltip_table(x, y)
hchart(weather, type ="columnrange",
hcaes(x = date, low = min_temperaturec, high = max_temperaturec,
color = mean_temperaturec))%>%
hc_chart(polar =TRUE)%>%
hc_yAxis( max =30, min =-10, labels = list(format ="{value} C"),
showFirstLabel =FALSE)%>%
hc_xAxis(
title = list(text =""), gridLineWidth =0.5,
labels = list(format ="{value: %b}"))%>%
hc_tooltip(useHTML =TRUE, pointFormat = tltip,
headerFormat = as.character(tags$small("{point.x:%d %B, %Y}")))Tecnologia
Há muitas ferramentas de visualização de dados disponíveis. Neste artigo, preparamos uma lista abrangente de algumas das ferramentas de visualização de dados mais úteis na ciência de dados.
Visualização de dados é, na minha opinião, a melhor forma de apresentar relatórios descritivos e analíticos a partir de um conjunto de dados. Eu sou do time que ama visualização. Dá para contar a história toda em uma única tela — claro, isso também depende da complexidade dos dados. Se você está lendo este tutorial, provavelmente já conhece o pacote Ggplot2 no R, usado para gerar gráficos excelentes para análise, mas que em alguns casos deixa a desejar em propriedades dinâmicas.
Voltando ao Highcharter: ele é um wrapper em R da biblioteca JavaScript HighCharts e seus módulos.
Os principais recursos deste pacote são:
Bora colocar a mão na massa e criar algumas visualizações com o Highcharter, explorando os recursos acima:
Criando gráficos básicos com a função hchart
hchart é uma função genérica que recebe um objeto e retorna um objeto highcharter. Há funções cujo comportamento é parecido com as do pacote ggplot2, como:
qplotdo ggplot2.geom_Sdo ggplot2.aesdo ggplot2.Vamos escolher um dataset. Vou usar o conjunto Pokemon, que também está disponível no pacote Highcharter. Dê uma olhada rápida:
Vamos plotar um gráfico de barras.
Pronto: você tem um gráfico de barras por categoria type 1 dos pokémon.
Se preferir um gráfico de colunas, basta trocar o parâmetro type para column.
Treemap
Também podemos usar hc_add_series para montar o gráfico. Ele serve para adicionar e remover séries de um objeto highchart.
Gráfico de dispersão
A principal diferença entre as funções geom_ do ggplot2 e o hc_add_series é que, no Highcharter, precisamos informar os dados e as estéticas explicitamente em cada função, enquanto no ggplot2 dá para definir dados e estéticas em uma camada e depois ir adicionando geoms que usam as mesmas definições.
Um exemplo direto está abaixo, usando o dataset diamonds do pacote ggplot2.
Como no exemplo, o gráfico foi construído com três séries: dispersão, linha e faixa de área.
Vamos reproduzir um desenvolvimento em JavaScript do highchart no R usando hc_add_series.
Comparando, dá para ver cada bloco do código JavaScript convertido em funções do R, encadeadas com pipes. Vale observar alguns argumentos, como o pointFormat do hctooltip, que usa o mesmo formato do código JavaScript. Você pode ver os detalhes aqui.
Highstocks
Highstocks são gráficos para análises financeiras e de séries temporais; funcionam muito bem com a biblioteca
quamtmod, e é simples plotar símbolos e depois adicionar mais séries comhc_add_series.Nesse gráfico, não precisamos acrescentar código extra: hchart trabalha muito bem com objetos xts, oferecendo um snapshot dinâmico dos dados. Use o zoom para detalhar os dados em partes menores e analisar melhor.
Vamos usar o hc_add_series.
Perceba como a visualização lida muito bem com um volume grande de dados.
Experimente stocks com diferentes objetos xts.
Highmaps
A forma mais simples de criar um mapa no highcharter é usando a função
hcmap. Selecione uma URL da coleção de highmaps e use essa URL como mapa na função hcmap. Isso vai baixar o mapa e criar um objeto usando as informações como argumento mapdata.Vamos plotar o mapa da Índia.
Esse é um mapa simples — que tal transformar em uma coroplética?
Todo mapa baixado da coleção de mapas do Highcharts traz chaves para relacionar os dados. Há duas funções que ajudam a entender quais regiões estão codificadas e como unir mapa e dados:
Faça alguns testes com hc_add_series em mapas e coropléticas. Para mais detalhes e exemplos, visite aqui.
Plug-ins
Agora vamos explorar alguns plug-ins do highcharter, como agrupamento, drill-down, download, impressão de dados e temas caprichados.
Vamos agrupar os dados do dataset mpg. Para visualizar melhor, criamos uma lista que categoriza os dados por fabricante.
Vamos criar um gráfico com drill-down para detalhar a análise. Se você entende listas em R, o código fica ainda mais fácil.
Vamos aplicar drill-down em outros gráficos.
Vamos adicionar a funcionalidade de exportar dados.
Você pode aprender muito mais aqui — é uma biblioteca completa sobre Highcharter. Para fechar, compartilho um dos meus gráficos favoritos, criado com um dataset de clima. Um argumento interessante é o
polar: ao defini-lo como TRUE, a visualização muda completamente.Se quiser aprender mais sobre visualização de dados em R, faça o curso Data Visualization with ggplot2 (Part 1) da DataCamp e confira nosso R Formula Tutorial.