class: center, middle, inverse, title-slide .title[ # Dashboards em Shiny I ] .subtitle[ ## htmlwidgets ] .author[ ###
] .date[ ### Setembro de 2023 ] --- ## htmlwidgets `htmlwidgets` são bibliotecas de visualização JavaScript encapsuladas em pacotes de R. Elas nos permitem usar diversas ferramentas JavaScript diretamente do R, adicionando algumas poucas linhas de código em nosso script. Usando `htmlwidgets`, conseguimos construir tabelas, gráficos, mapas e muito outras visualizações interativas e naturalmente bonitas. Vamos falar aqui dos seguintes pacotes: - `{reactable}`, para tabelas - `{plotly}`, para gráficos - `{leaflet}`, para mapas [Clique aqui](https://www.htmlwidgets.org/index.html) para acessar uma lista completa de todos os `htmlwidgets` disponíveis. --- ## Tabelas com reactable O pacote `reactable` nos permite criar tabelas interativas baseadas na biblioteca [React Table](https://github.com/tannerlinsley/react-table). Para criar uma reactable no nosso app, precisaremos das funções `reactable()`, `reactableOutput()` e `renderReactable()`. [Clique aqui](https://glin.github.io/reactable/) para acessar o tutorial completo do pacote `{reactable}`. Exemplo de construção: ```r # ui reactable::reactableOutput("tabela") # server ouput$tabela <- reactable::renderReactable({ reactable::reactable(imdb) }) ``` --- ## Tabelas com reactable A interatividade dos `htmlwidgets` não depende de uma sessão R rodando por trás. Você pode utilizá-los em qualquer documento `.html`. ```r reactable::reactable( mtcars, compact = TRUE, defaultPageSize = 4, striped = TRUE ) ```
--- ## Pacotes alternativos para tabelas A seguir, uma lista de pacotes/funções alternativos que trazem soluções para visualização de tabelas. - `knitr::kable()`: não é um htmlwidget (não possui interatividade), mas é uma solução para formatar tabelas quando não precisamos que elas sejam interativas. Funciona em conjunto com o pacote `{kableExtra}`. - O pacote `DT` embruha a biblioteca JavaScript [DataTables](http://datatables.net/) e é uma alternativa ao `reactable` para a criação de tabelas interativas. Embora seja mais burocrático na customização, essa biblioteca possui um recurso muito útil para a aplicativos Shiny: a edição de tabelas. #### Tutoriais - [Tutorial kable e kableExtra](https://cran.r-project.org/web/packages/kableExtra/vignettes/awesome_table_in_html.html) - [Tutorial DT](https://rstudio.github.io/DT/) --- ## Gráficos com plotly O pacote `plotly` nos permite criar gráficos interativos baseados na biblioteca [Plotly](https://plotly.com/) (construída em [D3](https://d3js.org/)). Para criar um plotly no nosso app, precisaremos criar um plotly e das funções `plotlyOutput()` e `renderPlotly()`. Embora seja possível criar um plotly do zero usando a função `plot_ly()`, um jeito muito eficiente de utilizar essa biblioteca é criar um ggplot e então utilizar a função `ggplotly()`. Veja o exemplo a seguir. #### Tutoriais - [Tutorial plotly](https://plotly.com/r/) - [Interactive web-based data visualization with R, plotly, and shiny](https://plotly-r.com/) --- ## Gráficos com plotly ```r library(ggplot2) p <- ggplot(mtcars) + geom_point(aes(x = wt, y = mpg)) plotly::ggplotly(p, height = 400) ```
--- ## Gráficos com plotly Para colocar um plotly no nosso app, basta utilizar as funções `plotlyOutput()` e `renderPlotly()`. ```r # ui plotly::plotlyOutput("grafico") # server ouput$grafico <- plotly::renderPlotly({ p <- ggplot(mtcars) + geom_point(aes(x = wt, y = mpg)) plotly::ggplotly(p, height = 400) }) ``` --- ## Pacotes alternativos A seguir, uma lista de pacotes/funções alternativos que trazem soluções para visualização de gráficos. - `highcharter`: pacote gráfico baseado na biblioteca JavaScript [Highcharts](https://www.highcharts.com/). A biblioteca Highcharts é gratuita apenas para fins educacionais e não lucrativos (exceto órgãos governamentais). Para outros usos, você pode precisar de uma licença. - `echarts4r`: pacote gráfico baseado na biblioteca JavaScript `echarts`. Essa biblioteca é código aberto, podendo ser utilizada gratuitamente para qualquer propósito. - Procure por pacotes para tipos específicos de gráficos na [galeria de htmlwidgets](http://gallery.htmlwidgets.org/). #### Tutoriais - [Tutorial highcharter](http://jkunst.com/highcharter/) - [Tutorial echarts4r](https://echarts4r.john-coene.com/) - [Documentação Highcharts](https://api.highcharts.com/highcharts/) --- ## Mapas com leaflet O pacote `{leaflet}` nos permite criar mapas interativos baseados na biblioteca JavaScript open-source [Leaflet](https://leafletjs.com/). Para colocar um mapa leaflet no nosso app, precisaremos criar um leaflet e das funções `leafletOutput()` e `renderLeaflet()`. Para criar um mapa leaflet, utilizamos a função `leaflet::leaflet()` e diversas funções auxiliares para caracterizar nosso mapa. Um tutorial de como utilizar o `leaflet` se encontra [aqui](http://rstudio.github.io/leaflet/). A seguir, mostramos um exemplo simples de como criar um mapa leaflet. --- ## Mapas com leaflet ```r library(leaflet) leaflet(height = 300) %>% addTiles() %>% addMarkers( lng = -46.6623969, lat = -23.5581664, popup = "A Curso-R morava aqui. Agora ela mora na internet e nos nossos corações ❤️" ) ``` --- ## Mapas com leaflet Para colocarmos um leaflet no nosso app, basta utilizarmos as funções `leafletOutput()` e `renderLeaflet()`. ```r # ui leaflet::leafletOutput("mapa") # server ouput$mapa <- leaflet::renderLeaflet({ leaflet(height = 300) %>% addTiles() %>% # Adiciona a camada gráfica do OpenStreetMap (padrão) addMarkers( lng = -46.6623969, lat = -23.5581664, popup = "A Curso-R mora aqui :)" ) }) ``` --- ## Pacotes alternativos - `ggplot2::geom_sf`: não é um htmlwidget (não possui interatividade), mas é uma boa solução para construção de mapas utilizando o framework do pacote `ggplot2()` em conjunto do pacote `sf`. - `highcharter::hcmap()`: variação do `highcharter` para mapas, baseada na biblioteca JavaScript [Highcharts](https://www.highcharts.com/maps/demo). - `{tmap}`: Pacote focado em mapas temáticos: [Thematic Maps](https://r-tmap.github.io/tmap/). --- ### Exercícios Faça os exercícios do [Capítulo 8 do livro Programando em Shiny](https://programando-em-shiny.curso-r.com/htmlwidgets.html#exerc%C3%ADcios). --- #### Tutoriais - [Documentação geom_sf()](https://ggplot2.tidyverse.org/reference/ggsf.html) - [Construindo mapas com o highcharter](http://jkunst.com/highcharter/highmaps.html) - [Documentação Highmaps](https://api.highcharts.com/highmaps/) --- ## Atividade Vamos construir htmlwidgets no nosso Shinydashboard. <br> <center> <img src="https://media.giphy.com/media/JIX9t2j0ZTN9S/giphy.gif" width = "300" height = "300"> <br> <br>
Ao RStudio: 22-htmlwidgets.R
<center> --- ## Referências e material extra #### htmlwidgets - [Galeria htmlwidgets](http://gallery.htmlwidgets.org/) #### reactable - [A biblioteca React Table](https://github.com/tannerlinsley/react-table) - [Tutorial reactable](https://glin.github.io/reactable/) #### DT - [Tutorial DT](https://rstudio.github.io/DT/) #### plotly - [Tutorial plotly](https://plotly.com/r/) - [Interactive web-based data visualization with R, plotly, and shiny](https://plotly-r.com/) --- ## Referências e material extra #### highcharter/highcharts - [Tutorial highcharter](http://jkunst.com/highcharter/) - [Biblioteca Highcharts](https://www.highcharts.com/) - [Galeria Highcharts](https://www.highcharts.com/demo) - [Documentação Highcharts](https://api.highcharts.com/highcharts/) #### leaflet - [Biblioteca Leaflet](https://leafletjs.com/) - [Tutorial Leaflet](http://rstudio.github.io/leaflet/) #### highmaps - [Galeria Highmaps](https://www.highcharts.com/maps/demo) - [Documentação Highmaps](https://api.highcharts.com/highmaps/) --- ## Referências e material extra #### tmap - [Thematic Maps](https://r-tmap.github.io/tmap/) #### Miscelânea - [Documentação geom_sf()](https://ggplot2.tidyverse.org/reference/ggsf.html) - [Tutorial kable e kableExtra](https://cran.r-project.org/web/packages/kableExtra/vignettes/awesome_table_in_html.html) - [Biblioteca D3](https://d3js.org/)