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

Автор

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

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

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

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

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

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

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

Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
ℹ Please use `linewidth` instead.
ℹ The deprecated feature was likely used in the ggplot2 package.
  Please report the issue at <https://github.com/tidyverse/ggplot2/issues>.
`geom_smooth()` using formula = 'y ~ x'
Warning: The following aesthetics were dropped during statistical transformation: size.
ℹ This can happen when ggplot fails to infer the correct grouping structure in
  the data.
ℹ Did you forget to specify a `group` aesthetic or to convert a numerical
  variable into a factor?
Warning: The following aesthetics were dropped during statistical transformation: size.
ℹ This can happen when ggplot fails to infer the correct grouping structure in
  the data.
ℹ Did you forget to specify a `group` aesthetic or to convert a numerical
  variable into a factor?

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

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

Warning: `line.width` does not currently support multiple values.

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

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

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

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