Прежде чем мы начнем, это не борьба между 2D и 3D-графиками, и это не означает, что 3D-графики превосходят 2D, потому что у них есть одно дополнительное измерение. Фактически, я из тех, кто старается не добавлять в сюжет слишком много, чтобы сюжет потерял свой собственный сюжет. Но бывают случаи, когда вы знаете, что можете лучше рассказывать истории, используя трехмерные сюжеты. Эта статья поможет вам в таких случаях!
3D-сюжеты, построенные правильным образом для правильных целей, всегда ошеломляют. В этой статье мы увидим, как создавать потрясающие 3D-графики с помощью R, используя ggplot2
и rayshader
. В то время как ggplot2
может быть знаком любому специалисту в области науки о данных, rayshader
- нет. Итак, давайте начнем с небольшого введения в rayshader
.
Из описания пакета rayshader:
rayhader - это пакет с открытым исходным кодом для создания 2D и 3D визуализации данных в R. rayhader использует данные высот в базовой R-матрице и комбинацию трассировки лучей, наложения сферической текстуры и наложений. , и окружающая окклюзия для создания красивых топографических 2D и 3D карт. Помимо карт, rayhader также позволяет пользователю преобразовывать объекты ggplot2 в красивую трехмерную визуализацию данных.
Необходимые библиотеки / пакеты:
Последняя версия rayshader
доступна на github, которую можно установить с помощью devtools
или remotes
.
devtools::install_github("tylermorganwall/rayshader")
И убедитесь, что у вас установлена самая последняя версия ggplot2
. Если вы любитель аккуратных вселенных, то получите самые свежие новости.
install.packages('tidyverse')
Данные
Чтобы требования этой статьи были минимальными, мы будем использовать faithfuld
один из встроенных наборов данных в ggplot2
библиотеке.
> glimpse(faithfuld) Observations: 5,625 Variables: 3 $ eruptions <dbl> 1.600000, 1.647297, 1.694595, 1.741… $ waiting <dbl> 43, 43, 43, 43, 43, 43, 43, 43, 43,… $ density <dbl> 0.003216159, 0.003835375, 0.0044355…
Как видите, faithfuld
имеет 3 непрерывные переменные, которые мы будем использовать для построения графиков.
2D график
Наше путешествие по 3D-графику только начинается с обычного 2D-графика ggplot2. Мы построим график плотности с помощью geom_raster между waiting
, eruptions
, чтобы увидеть, как обстоят дела с данными.
faithful_dd <- ggplot(faithfuld, aes(waiting, eruptions)) + geom_raster(aes(fill = density)) + ggtitle("3D Plotting in R from 2D_ggplot_graphics") + labs(caption = "Package: rayshader") + theme(axis.text = element_text(size = 12), title = element_text(size = 12,face="bold"), panel.border= element_rect(size=2,color="black",fill=NA)) faithful_dd
Как вы можете видеть в приведенном выше коде, наряду с сюжетом мы немного улучшили внешний вид сюжета.
Что ж, это красиво, но это один из тех сюжетов, где я хотел бы показать его в 3D, чтобы показать небольшой холм - на самом деле, два небольших холма. Итак, приступим к трехмерному сюжету.
Путешествие от 2D-сюжета к 3D-сюжету - одна линия!
Переход от 2D-графика к 3D-графику - это всего лишь одна дополнительная строка кода, которая поступает из пакета rayshader
. Функция plot_gg()
which принимает набор аргументов, чтобы определить, как должен выглядеть трехмерный график.
plot_gg(faithful_dd, multicore = TRUE, width = 8, height = 8, scale = 300, zoom = 0.6, phi = 60, background = "#afceff",shadowcolor = "#3a4f70")
faithful_dd
- это объект ggplot2, который мы создали на предыдущем шаге. Поскольку большинство аргументов говорят сами за себя, например — multicore
для активации всех ядер компьютера во время рендеринга. Такие аргументы, как zoom
и phi
, предназначены для установки того, где должен быть вид 3D-камеры.
Давайте посмотрим на сгенерированные графики:
Разве это не красиво? Это не просто потрясающе, но и целенаправленно. Представьте, что вам нужно объяснить градиентный спуск или какой-то алгоритм оптимизации, подобный этому, который является более интуитивным и не требует пояснений для получения ментальной модели.
Еще кое-что!
Эта история не заканчивается просто трехмерным сюжетом, но разработчик (Тайлер Морган-Уолл) любезно предоставил нам еще одну функцию render_movie()
, которая размещает камеру и вращает ее вокруг трехмерного сюжета, который мы только что построили, и дает нам потрясающее видео 3D сюжета. render_movie()
внутренне использует пакет av
для создания видео.
render_movie("faithful_3d.mp4", frames = 480)
Резюме
Благодаря Тайлеру, теперь мы можем создавать потрясающие 3D-графики из 2D-графиков - просто используя одну дополнительную функцию plot_gg()
, в конечном итоге даже создавая 360-градусное видео 3D-графика. Узнайте больше о Визуализации данных в R здесь и документации rayhader. Используемый здесь код и sessionInfo доступны здесь.