Нужно ли изучать ggplot2 или ggvis?


38

Нужно ли изучать ggplot2 или ggvis? Я не обязательно хочу изучать оба, если один из них превосходит в любом отношении. Почему сообщество R продолжает создавать новые пакеты с перекрывающимися функциями? В вводном посте не упоминается слово, почему ggvis создан, поскольку сложный пакет для построения графиков ggplot2 уже существует.


5
ggvis - это совершенно другой чайник для рыбы. Реальная альтернатива - между ggplot и решеткой .
Гала-концерт

1
Я думаю, что ответ зависит от того, что вы после. Если вы ищете статичные продвинутые сюжеты, вам нужно учиться ggplot2. Для веб-визуализации рассмотрим ggvis.
Роман Луштрик

Ответы:


39

Начните с ggplot2. Создает статические сюжеты.

Помимо статических графиков, ggvis можно использовать и для создания интерактивных графиков. Как только вы изучите синтаксис ggplot2, синтаксис добавления интерактивности для создания графиков ggivs будет следовать естественным образом.


4
Это неточно (возможно, это было верно на момент написания). ggvis определенно может быть использован для создания статических графиков. Тот факт, что он также допускает интерактивные графики, является особенностью, а не ограничением. Один простой пример статичного сюжета:library('ggvis'); mtcars %>% ggvis(~wt, ~mpg) %>% layer_points(fill = ~factor(cyl))
Андре Терра

47

Я хочу немного расширить ответ Дайан Кук. По ее словам, 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 часов. Так что, на самом деле, вы, вероятно, научитесь и тому, и другому.


1
Отличное сравнение
скан

Что быстрее ггвис или решетка или ргл? (для больших наборов данных)
скан

+1 фантастически пиши. Я согласен со всем здесь на основе моего опыта с обоими до сих пор.
Дэвид Крук

Здравствуйте, а как насчет ggvis vs rcharts?
Скан

СЕРИЯ ВРЕМЕНИ: ggplot2 окончательно победит с расширением ggfortify. Смотрите эту превосходную документацию об этом: rpubs.com/sinhrks/basics .
Архимеда

10

Я думаю, что сообщение, появляющееся после, library(ggvis)говорит само за себя:

API ggvis в настоящее время быстро развивается. Мы настоятельно рекомендуем вам не полагаться на это для производства, но не стесняйтесь исследовать. Если вы столкнулись с явной ошибкой, отправьте минимальный воспроизводимый пример по адресу https://github.com/rstudio/ggvis/issues . Для вопросов и других обсуждений, пожалуйста, используйте https://groups.google.com/group/ggvis .

По сравнению с ggplot2 ggvis по-прежнему не хватает некоторых функций и полировки (например, нет способа добавить заголовок к графику, заголовки осей перекрываются с метками тиков, а есть и другие, фасетирование не поддерживается и т. Д.) С другой стороны, синтаксис ggvis чувствует немного чище, и интерактивность действительно потрясающая.

Из моего собственного опыта ggvis является обязательным, если вы создаете блестящее приложение. Тогда преимущества наличия графического и дружественного графического движка значительно перевешивают любые его недостатки.

Если вы хотите создавать статические графики для исследования данных, то ggplot2 - это зрелая библиотека с множеством интересных функций, со здоровым сообществом пользователей и множеством ресурсов для изучения.

Философия обоих пакетов схожа, поэтому навыки можно легко перенести из одного пакета в другой.


8

Сообщество R продолжает придумывать новые (и часто пересекающиеся) пакеты по ряду причин:

1) Кто-то хочет что-то изменить или добавить что-то, чего нет в существующем пакете, но большая его часть перекрывается (следовательно, многие пакеты регрессируют)

2) Кто-то пишет пакет как назначение

3) Написание пакетов - это весело (если вам нравятся такие вещи)

4) Они не знают, что оригинальная упаковка существует


9
Что касается конкретного примера и вашего пункта 4: ggvis создан теми же людьми, что и ggplot2. Важным моментом здесь является то, что использование ggplot2 настолько широко распространено, что стало невозможно внедрять изменения, не нарушая множество существующих кодовых / зависимых пакетов.
Роланд

1
Является ли такое переосмысление существовавшего ранее пакета таким же, как экономические спады в капиталистических обществах?
qazwsx

2
@Peter: Как аутсайдер R, это кажется мне честным комментарием, но (что наиболее необычно), вы не отвечаете на вопрос!
Ник Кокс,

@NickCox Я ответил на один из вопросов в этом вопросе. :-).
Питер Флом - Восстановить Монику

1
@ Питер Очень справедливо. Поэтому я считаю уместной перекрестную ссылку на stats.stackexchange.com/questions/58966/…
Ник Кокс,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.