Для побудови графіку з R я повинен вивчити ggplot2 або ggvis?


38

Для побудови графіку з R я повинен вивчити 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; контурні ділянки; природні теплові карти; природні кореляційні діаграми; крапкові точки; сюжетні скрипки; мережеві сюжети; дендрограми. Звичайно, я впевнений, що дуже розумні люди можуть створити все це в ggvis, але я не такий розумний.

Анотації ggplot2 мають дуже хороший, можливо, недостатньо використаний рамки для анотацій. ggvis ні.

Subplots & Facets ggplot2 має дуже приємну, але, можливо, досить обмежену функцію "облицювання". Ви також можете комбінувати кілька сюжетів ggplot2, використовуючи пакет сітки. На даний момент ви не можете робити ні з ggvis. Діаграми ggvis не можуть бути об'єднані в одне зображення (оскільки це не зображення, це "живі" веб-сторінки), і він не підтримує жодної форми граніту або субплотирования. Це, як передбачається, буде в трубопроводі.

Візуальна гнучкість ggplot2 хоче, щоб кожен сюжет виглядав однаково, що означає, що автор вважає за краще стилістично. Наприклад, у ggplot2, наприклад, не можна мати ділянки з кількома осями y. ggvis може. ggvis набагато гнучкіший, ніж ggplot2. Набагато простіше робити такі речі, як приховування легенд, поєднувати кілька легенд в одне, використовувати різні масштаби для різних речей на одному сюжеті тощо.

Глибока налаштованість Якщо ви хочете створити, скажімо, нову розумну шкалу, це не надто важко зробити в ggplot2 (хоча це досить заплутано). Здається, просто не існує способу зробити багато чого в ggvis. Можливо, його просто ще немає.

Часовий ряд ggplot2 не любить будувати часові ряди. Це може , але цього не хоче . Насправді жоден з них не хоче; обидва наполягають на тому, щоб дані передавались у data.frame, і вони не можуть обробляти xts або зоопарки. Вони також не мають вбудованих функцій для нарізки часових рядів. Але ggvis не може протистояти тимчасовому ряду так сильно, як ggplot2. Це частково тому, що його так швидко оновлювати дані у графічній графіці ggvis. Якщо ви хочете скласти таймсері, вам доведеться перемогти або в поданні, але ggvis набагато менш пасивно-агресивний щодо цього.

Чи є вони однаковим синтаксисом? Сорт ... Між ними багато спільного, і навчитися мислити в стилі одного допоможе адаптуватися до стилю іншого. Зокрема, обидва розроблені таким чином, що всі графічні виклики з'єднуються один з одним у одному рядку коду. Основна перевага цього полягає в тому, що робить налагодження та профілювання дуже важким, а в основному робить функції налагодження / профілювання такими, як Rstudio, марними. Крім цього, вони синтаксично зовсім інші. Деякі речі, складні в ggplot2, легко є в ggvis. Деякі речі, які легко в ggplot2, неможливо в ggvis. І навпаки. (Я трохи надаю перевагу тому, як ggvis робить речі, які мені легше зрозуміти.)

Помилок ggvis все ще досить багато. Іноді вона поводиться просто дивно. Однак іноді сюжети випадковим чином зникають з причин, які займають години для обійстя і мають дуже мало сенсу. Розробники визнають це вільно, ggvis ще не готовий до виробництва. Якщо ви маєте справу з якими - або складнощами, ви будете виявити , що вони не жартують.

Підсумок: Навчання проміжним складанням у кожному займає близько 16 годин. Отже, реально, ви, мабуть, навчитесь обом.


1
Чудове порівняння
скан

Що швидше ggvis чи решітка чи rgl? (для великих наборів даних)
скан

+1 фантастичне записування. Я погоджуюся з усім, що є тут, виходячи з мого досвіду з обома поки що.
Девід Крук

Привіт, а як щодо ggvis vs rcharts?
скан

ЧАС СЕРІЇ: ggplot2 остаточно перемагає з розширенням ggfortify. Дивіться цю чудову документацію про це: rpubs.com/sinhrks/basics .
Архімед

10

Я думаю, що повідомлення, яке з’являється після library(ggvis), само собою пояснює:

API ggvis в даний час швидко розвивається. Ми настійно рекомендуємо не покладатися на це для виробництва, але сміливо досліджуйте. Якщо ви зіткнулися з явною помилкою, подайте мінімальний відтворюваний приклад на веб- сайті https://github.com/rstudio/ggvis/isissue . Для питань та інших обговорень скористайтеся https://groups.google.com/group/ggvis .

У порівнянні з ggplot2 ggvis все ще не має деяких функцій та полірування (жодного способу додати заголовок до графіку, наприклад, заголовки осей, що перекриваються мітками, і їх більше, фасетування не підтримується тощо). З іншого боку, синтаксис ggvis відчуває трохи чистіше, а інтерактивність справді приголомшлива.

З мого власного досвіду ggvis - це обов’язково, якщо ви створюєте блискучий додаток. Тоді переваги створення веб-та дружнього для R графічного двигуна значно переважають будь-які недоліки, які він має.

Якщо ви хочете робити статичні графіки для дослідження даних, то 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.