15  Динамические визуализации в R

Автор

И.С. Поздняков

15.1 Интерфейс для JavaScript фреймворков: пакет htmlwidgets

До этого мы делали только статические картинки, но в R можно делать динамические визуализации с интерактивными элементами! Делаются такие визуализации на основе JavaScript, в первую очередь, на основе фреймворка D3.js. Существует пакет для R htmlwidgets, который предоставляет интерфейс для работы с JavaScript визуализациями из R и вставлять их в RMarkdown или Quarto HTML-документы и веб-приложения Shiny. htmlwidgets — это пакет, в первую очередь, для разработчиков R пакетов, которые делают на его основе очень простые и удобные в использовании R пакеты для создания динамических визуализаций и прочих динамических элементов.

15.2 Динамические визуализации в plotly

Один из самых распространенных средств для динамических визуализаций — это пакет plotly.

install.packages("plotly")
library(plotly)

Attaching package: 'plotly'
The following object is masked from 'package:ggplot2':

    last_plot
The following object is masked from 'package:stats':

    filter
The following object is masked from 'package:graphics':

    layout

Есть два базовых способа использовать plotly в R. Первый — это просто оборачивать готовые графики ggplot2 с помощью функции ggplotly().

ggplotly(meta_2_gg)
`geom_smooth()` using formula = 'y ~ x'

Не всегда это получается так, как хотелось бы, но простота этого способа подкупает: теперь наведение на курсора на точки открывает небольшое окошко с дополнительной информацией о точке (конечно, если вы читаете эту книгу в PDF или ePUB, то этого не увидите).

Другой способ создания графиков — создание вручную с помощью plot_ly(). Такой способ частично напоминает ggplot2 использованием пайпов (обычных %>% или |>, а не +), задание эстетик здесь происходит с помощью ~.

plot_ly(poli, 
        x = ~Outcome_age, 
        y = ~Effect_size, 
        size = ~1/(SE^2), 
        color = ~Effect_size, 
        sizes = c(40, 400),
        text = ~paste("N: ", n, '<br>Country:', Country)) %>%
  add_markers()
Warning: `line.width` does not currently support multiple values.

15.3 Другие пакеты для динамической визуализации

Кроме plotly есть и множество других HTML-виджетов для динамической визуализации. Я рекомендую посмотреть их самостоятельно на http://gallery.htmlwidgets.org/

Выделю некоторые из них:

  • echarts4r — один из основных конкурентов для plotly. Симпатичный, работает довольно плавно, синтаксис тоже пытается вписаться в логику tidyverse.
  • leaflet — основной (но не единственный!) пакет для работы с картами. Leaflet — это очень популярная библиотека JavaScript, используемая во многих веб-приложениях, а пакет leaflet - это довольно понятный интерфейс к ней с широкими возможностями.
  • networkD3 — пакет для интерактивной визуализации сетей. Подходит для небольших сетей.