Я хочу немного расширить ответ Дайан Кук. По ее словам, ggplot2 предназначен для создания статических графиков, ggvis - для интерактивных графиков. Есть множество последствий для этого:
Тип файла Вывод ggvis - HTML, включая файлы CSS и javascript. ggvis, естественно, не выводит обычные файлы изображений. ggplot2 выводит обычные изображения, которые затем могут быть встроены в HTML, PDF, GIF или по электронной почте, или что-то еще. ggvis, если вы хотите отправить файл по электронной почте, вы архивируете каталог файлов HTML для просмотра в браузере.
Анимация . Следствием этого является то, что если вы хотите создать анимацию, вы можете создать кадры в ggplot2 и объединить их, но нет естественного способа сделать это с помощью ggvis. ggvis, действующий в интерактивном режиме, оживит «живьем», но это разные виды анимации. Если в каждом кадре происходит больше, чем может обработать ggvis, вы не можете обойти это (по крайней мере, естественным образом), создав изображения и создав фильм на заднем плане. Точно так же пользователь не может загрузить фильм или gif-файл из ggvis для воспроизведения.
Прямо сейчас в моем текущем проекте я переключился с ggplot2 на ggvis, потому что ggplot2 был слишком медленным для интерактивной анимации. Но я также хотел бы, чтобы пользователь, поиграв с настройками, мог нажимать «идти» и загружать полнометражный фильм с плавной анимацией того, что он делал. Я не понял, как это сделать с помощью ggvis, но это было бы просто, используя ggplot2.
Скорость ggvis намного, намного, намного быстрее, чем ggplot2, особенно при изменении данных. Каждый график ggplot2 имеет секунду или несколько задержек. У ggvis есть примерно секунда, когда вы впервые создаете график, после чего изменение данных происходит незаметно - ggvis может быть «реактивно» связан с данными, поэтому он обновляется при каждом изменении данных. С ggplot2 весь сюжет будет перерисован.
Стиль и внешний вид Графики ggplot2 на первый взгляд кажутся немного лучше, чем графики ggvis. Графики ggplot2 довольно элегантны. Сюжеты ggvis проще, но они растут на мне. Есть также расширения для ggplot2, такие как пакеты xkcd и wesanderson, где нет аналога для ggvis. Все графики ggplot2 выглядят так, как будто они сделаны одним и тем же человеком (автором ggplot2), и через некоторое время они устают.
Полнота Существуют типы графиков, которые вы можете создать в ggplot2, которые ggvis не поддерживает, по крайней мере, до сих пор. Например, в ggvis нет элемента сюжета "ковер". Я видел один или два хороплета, которые были сделаны с помощью ggvis, но пока нет естественной встроенной поддержки. ggplot2 имеет полярные координаты (то есть круговые диаграммы), ggvis - нет. Также отсутствует в ggvis (и доступно либо в ggplot2, либо в расширении ggplot2): boxplots; контурные участки; природные тепловые карты; диаграммы естественной корреляции; dotplots; участки для игры на скрипке; сетевые участки; Дендрограммы. Конечно, я уверен, что некоторые очень умные люди могут создать все это в ggvis, но я не такой умный.
Аннотации ggplot2 имеет очень хорошую, возможно, недостаточно используемую структуру аннотаций. Ггвис нет.
Subplots & Facets ggplot2 имеет очень приятную, но, возможно, довольно ограниченную, «ограненную» особенность. Вы также можете объединить несколько графиков ggplot2, используя пакет сетки. На данный момент вы не можете сделать ни с ggvis. Графики ggvis не могут быть объединены в одно изображение (потому что они не являются изображениями, они являются «живыми» веб-страницами), и они не поддерживают какие-либо виды огранки или подзаписи. Это должно быть в стадии разработки.
Визуальная гибкость ggplot2 хочет, чтобы каждый сюжет выглядел одинаково, что означает, что автор предпочитает стилистически. Например, в ggplot2 не может быть графика с несколькими осями y. ггвис может. ggvis намного более гибок, чем ggplot2. Намного проще делать такие вещи, как скрывать легенды, объединять несколько легенд в одну, использовать разные шкалы для разных вещей на одном сюжете и т. Д.
Deep Customizability Если вы хотите создать, скажем, новый умный масштаб, его не слишком сложно , чтобы сделать это в ggplot2 (хотя это довольно запутанным). Похоже, в ggvis не существует способа сделать многое из этого. Может быть, просто нет - пока.
Временной ряд ggplot2 не любит строить временные ряды. Он может , но не хочет , чтобы . На самом деле ни один из них не хочет; оба настаивают на передаче данных в data.frame, и они не могут обрабатывать объекты xts или zoo. Они также не имеют встроенных функций для нарезки временных рядов. Но ggvis не так сильно сопротивляется временному ряду, как ggplot2. Это отчасти потому, что, я полагаю, так быстро обновляются данные на графике ggvis. Если вы хотите построить временную серию, вам придется превзойти их, но ggvis гораздо менее пассивно-агрессивен в этом.
Это один и тот же синтаксис? Вроде ... Между ними много общего, и научиться думать в стиле одного поможет адаптироваться к стилю другого. В частности, оба они спроектированы таким образом, что все вызовы печати передаются друг другу по одной строке кода. Основным преимуществом этого является то, что это делает отладку и профилирование действительно трудными, и в основном делает функции отладки / профилирования в таких вещах, как Rstudio, бесполезными. Кроме этого, они синтаксически совершенно разные. Некоторые вещи, которые сложны в ggplot2, просты в ggvis. Некоторые вещи, которые просты в ggplot2, невозможны в ggvis. Наоборот. (У меня есть предпочтение тому, как ggvis делает вещи, которые мне легче понять.)
Багов у ggvis еще немало. Иногда это ведет себя просто странно. Иногда, однако, графики случайно исчезают по причинам, которые обходятся часами и имеют мало смысла. Разработчики признают это свободно, ggvis еще не готов к производству. Если вы столкнетесь с любой сложностью, вы обнаружите, что они не шутят.
Итог: Изучение промежуточных сюжетов в каждом занимает около 16 часов. Так что, на самом деле, вы, вероятно, научитесь и тому, и другому.