Để vẽ đồ thị với R, tôi nên học ggplot2 hoặc ggvis?


38

Để vẽ đồ thị với R, tôi nên học ggplot2 hoặc ggvis? Tôi không nhất thiết muốn học cả hai nếu một trong số họ vượt trội về mặt nào. Tại sao cộng đồng R tiếp tục tạo các gói mới với các chức năng chồng chéo? Bài đăng trên blog giới thiệu không đề cập đến một từ tại sao ggvis được tạo ra cho rằng gói ggplot2 tinh vi đã tồn tại.


5
ggvis là một ấm cá hoàn toàn khác nhau. Sự thay thế thực sự là giữa ggplot và mạng .
Gala

1
Tôi nghĩ rằng câu trả lời phụ thuộc vào những gì bạn sau. Nếu bạn đang tìm kiếm các lô tiên tiến tĩnh, bạn sẽ muốn tìm hiểu ggplot2. Để hình dung web, xem xét ggvis.
Roman Luštrik

Câu trả lời:


39

Bắt đầu với ggplot2. Nó tạo ra các ô tĩnh.

Ngoài các ô tĩnh, ggvis cũng có thể được sử dụng để tạo các ô tương tác. Một khi bạn đã học được cú pháp của ggplot2, thì cú pháp để thêm tính tương tác để tạo các lô ggivs sẽ diễn ra một cách tự nhiên.


4
Điều này là không chính xác (có thể nó chính xác tại thời điểm viết). ggvis chắc chắn có thể được sử dụng để tạo ra các ô tĩnh. Thực tế là nó cũng cho phép các ô tương tác là một tính năng, không phải là một hạn chế. Một ví dụ đơn giản về cốt truyện tĩnh:library('ggvis'); mtcars %>% ggvis(~wt, ~mpg) %>% layer_points(fill = ~factor(cyl))
Andre Terra

47

Tôi muốn mở rộng một chút về câu trả lời của Dianne Cook. Như cô ấy đã nói, ggplot2 là để tạo ra các ô tĩnh, ggvis dành cho các ô tương tác. Có một loạt các hàm ý về điều đó:

Loại tệp ggvis đầu ra là HTML bao gồm các tệp CSS và javascript. ggvis không tự nhiên xuất các tập tin hình ảnh thông thường. ggplot2 xuất ra các hình ảnh thông thường, sau đó có thể được nhúng trong HTML hoặc pdf hoặc gif hoặc e-mail, hoặc bất cứ thứ gì khác. ggvis, nếu bạn muốn gửi e-mail tệp, bạn đang tải lên một thư mục các tệp HTML sẽ được xem trong trình duyệt.

Hoạt hình Hậu quả của điều đó là nếu bạn muốn tạo một hình ảnh động, bạn có thể tạo các khung hình trong ggplot2 và hợp nhất chúng, nhưng không có cách nào tự nhiên để làm điều này với ggvis. ggvis hành động tương tác sẽ làm sinh động "sống", nhưng đây là những loại hoạt hình khác nhau. Nếu có nhiều diễn biến trên mỗi khung hình hơn ggvis có thể xử lý, bạn không thể giải quyết vấn đề đó (ít nhất là theo cách tự nhiên) bằng cách tạo hình ảnh và làm phim ở chế độ nền. Tương tự, người dùng không thể tải xuống tệp phim hoặc tệp gif từ ggvis để phát lại.

Ngay bây giờ trong dự án hiện tại của tôi, tôi đã chuyển từ ggplot2 sang ggvis vì ggplot2 quá chậm để hoạt hình tương tác. Nhưng, tôi cũng muốn người dùng, sau khi chơi với các cài đặt, để có thể nhấp vào "đi" và tải xuống một bộ phim hoạt hình mượt mà, tốc độ đầy đủ về những gì họ đã làm. Tôi đã không tìm ra cách để làm điều này bằng cách sử dụng ggvis, nhưng nó sẽ là bánh bằng cách sử dụng ggplot2.

Tốc độ ggvis là rất nhiều, rất nhiều, nhanh hơn nhiều so với ggplot2, đặc biệt là khi thay đổi dữ liệu. Mỗi lô ggplot2 có một giây hoặc một vài độ trễ. ggvis có lần thứ hai hoặc lâu hơn khi bạn lần đầu tiên tạo cốt truyện, sau đó việc thay đổi dữ liệu là liền mạch - ggvis có thể được "phản ứng" liên kết với dữ liệu để nó tự cập nhật mỗi khi dữ liệu thay đổi. Với ggplot2, toàn bộ cốt truyện sẽ được vẽ lại.

Phong cách & Ngoại hình lô ggplot2 có vẻ đẹp hơn một chút, thoạt nhìn, hơn so với lô ggvis. lô ggplot2 khá thanh lịch. cốt truyện ggvis đơn giản hơn, nhưng chúng đang phát triển trên tôi. Ngoài ra còn có các phần mở rộng cho ggplot2, chẳng hạn như các gói xkcd và wesanderson, trong đó không có tương tự cho ggvis. Tất cả các lô ggplot2 trông giống như chúng được tạo ra bởi cùng một người (tác giả của ggplot2) và sau đó một thời gian sẽ mệt mỏi.

Tính đầy đủ Có các loại cốt truyện bạn có thể tạo trong ggplot2 mà ggvis không hỗ trợ, ít nhất là cho đến nay. Ví dụ, không có yếu tố cốt truyện "tấm thảm" trong ggvis. Tôi đã thấy một hoặc hai hợp xướng được tạo ra bằng ggvis, nhưng vẫn chưa có hỗ trợ tích hợp tự nhiên nào. ggplot2 có tọa độ cực (tức là biểu đồ hình tròn), ggvis thì không. Cũng bị thiếu từ ggvis (và có sẵn trong ggplot2 hoặc trong phần mở rộng ggplot2): boxplots; đường viền; bản đồ nhiệt tự nhiên; biểu đồ tương quan tự nhiên; dấu chấm; âm mưu vĩ cầm; lô mạng; dendrograms. Tất nhiên tôi chắc chắn rằng một số người rất thông minh có thể tạo ra tất cả những thứ này trong ggvis, nhưng tôi không thông minh đến thế.

Chú thích ggplot2 có một khung chú thích rất đẹp, có lẽ chưa được tận dụng. ggvis không.

Subplots & Facets ggplot2 có một tính năng "faceting" rất đẹp, nhưng có lẽ khá hạn chế. Bạn cũng có thể kết hợp nhiều lô ggplot2 bằng gói lưới. Đến bây giờ, bạn không thể làm gì với ggvis. Các lô ggvis không thể được kết hợp thành một hình ảnh duy nhất (vì chúng không phải là hình ảnh, chúng là các trang web "trực tiếp") và nó không hỗ trợ bất kỳ loại khía cạnh hoặc phân vùng nào. Điều này được cho là trong đường ống dẫn.

Visual Flexility ggplot2 muốn mọi cốt truyện đều giống nhau, điều đó có nghĩa là tác giả thích phong cách hơn. Chẳng hạn, không có cách nào để có một cốt truyện có nhiều trục y trong ggplot2. ggvis có thể. ggvis linh hoạt hơn rất nhiều so với ggplot2. Nó dễ dàng hơn nhiều để làm những việc như ẩn truyền thuyết, kết hợp nhiều huyền thoại thành một, sử dụng các quy mô khác nhau cho những thứ khác nhau trên cùng một cốt truyện, v.v.

Khả năng tùy biến sâu Nếu bạn muốn tạo, giả sử, một thang đo thông minh mới, không quá khó để làm điều đó trong ggplot2 (mặc dù nó khá khó hiểu). Dường như không có cách nào để làm nhiều điều đó trong ggvis. Có lẽ nó chỉ chưa được.

Chuỗi thời gian ggplot2 không thích vẽ chuỗi thời gian. Nó có thể , nhưng nó không muốn . Thật ra không ai trong số họ muốn; cả hai đều khăng khăng đòi được cung cấp dữ liệu trong data.frame và họ không thể xử lý các đối tượng xts hoặc sở thú. Họ cũng không có các tính năng tích hợp để cắt một chuỗi thời gian. Nhưng ggvis không chiến đấu chống lại chuỗi thời gian khó như ggplot2. Đó là một phần bởi vì nó quá nhanh để cập nhật dữ liệu trong một âm mưu ggvis, tôi cho rằng. Nếu bạn muốn vẽ một khoảng thời gian bạn sẽ phải đánh bại hoặc phải nộp bài, nhưng ggvis sẽ ít thụ động hơn rất nhiều về nó.

Có phải họ cùng một cú pháp? Sắp xếp ... Có rất nhiều điểm chung giữa họ, và học cách suy nghĩ theo phong cách của một người sẽ giúp thích nghi với phong cách của người kia. Đặc biệt, cả hai đều được thiết kế để tất cả các cuộc gọi âm mưu được nối với nhau trên một dòng mã. Ưu điểm chính của việc này là làm cho việc gỡ lỗi và định hình thực sự khó khăn, và về cơ bản làm cho các tính năng gỡ lỗi / lược tả trong những thứ như Rstudio trở nên vô dụng. Ngoài ra, chúng hoàn toàn khác nhau. Một số điều khó trong ggplot2 là dễ dàng trong ggvis. Một số điều dễ dàng trong ggplot2 là không thể trong ggvis. Và ngược lại. (Tôi có một chút ưu tiên cho cách ggvis làm mọi việc, điều mà tôi thấy dễ hiểu hơn.)

Lỗi ggvis vẫn còn khá nhiều. Đôi khi nó cư xử thật kỳ quặc. Tuy nhiên, đôi khi, các âm mưu biến mất ngẫu nhiên vì những lý do mất hàng giờ để xử lý và rất ít ý nghĩa. Các nhà phát triển thừa nhận điều này một cách tự do, ggvis chưa sẵn sàng sản xuất. Nếu bạn đối phó với bất kỳ sự phức tạp nào, bạn sẽ phát hiện ra họ không đùa.

Điểm mấu chốt: Học âm mưu trung gian trong mỗi mất khoảng 16 giờ. Vì vậy, thực tế, có lẽ bạn sẽ học cả hai.


1
So sánh tuyệt vời
skan

Ggvis hoặc mạng hoặc rgl nhanh hơn là gì? (đối với bộ dữ liệu lớn)
skan

+1 tuyệt vời viết lên. Tôi đồng ý với mọi thứ ở đây dựa trên kinh nghiệm của tôi với cả hai cho đến nay.
David Crook

Xin chào, còn ggvis vs rcharts thì sao?
skan

SERIES TIME: ggplot2 chắc chắn giành chiến thắng với việc mở rộng ggfortify. Xem tài liệu tuyệt vời này về nó: rpub.com/sinhrks/basics .
Archimede

10

Tôi nghĩ rằng thông điệp xuất hiện sau library(ggvis)là tự giải thích:

API ggvis hiện đang phát triển nhanh chóng. Chúng tôi thực sự khuyên bạn không nên dựa vào điều này để sản xuất, nhưng hãy thoải mái khám phá. Nếu bạn gặp phải một lỗi rõ ràng, vui lòng gửi một ví dụ có thể tái tạo tối thiểu tại https://github.com/rstudio/ggvis/issues . Đối với các câu hỏi và thảo luận khác, vui lòng sử dụng https://groups.google.com/group/ggvis .

So với ggplot2 ggvis vẫn thiếu một số tính năng và đánh bóng (không có cách nào để thêm tiêu đề vào biểu đồ, ví dụ như tiêu đề trục chồng chéo với nhãn tick, và có nhiều thứ khác, không được hỗ trợ, v.v.) Mặt khác, cú pháp của ggvis sạch hơn một chút, và tính tương tác thực sự tuyệt vời.

Theo kinh nghiệm của riêng tôi, ggvis là điều bắt buộc nếu bạn đang xây dựng một ứng dụng sáng bóng. Sau đó, lợi ích của việc có một công cụ vẽ đồ thị thân thiện với web và R vượt trội hơn nhiều so với bất kỳ thiếu sót nào hiện có.

Nếu bạn muốn làm đồ thị tĩnh để khám phá dữ liệu, thì ggplot2 là một thư viện trưởng thành với nhiều tính năng thú vị và với cộng đồng người dùng lành mạnh và nhiều tài nguyên để học hỏi.

Triết lý đằng sau cả hai gói là tương tự nhau, vì vậy các kỹ năng có thể được chuyển giao khá dễ dàng từ gói này sang gói khác.


8

Cộng đồng R liên tục đưa ra các gói mới (và thường chồng chéo) vì nhiều lý do:

1) Ai đó muốn thay đổi một cái gì đó hoặc thêm một cái gì đó không có sẵn trong một gói hiện có, nhưng phần lớn trong số đó trùng lặp (do đó, nhiều gói thực hiện hồi quy)

2) Ai đó viết một gói như một bài tập

3) Viết gói rất thú vị (nếu bạn thích kiểu đó)

4) Họ không biết gói ban đầu tồn tại


9
Về ví dụ cụ thể và quan điểm của bạn 4: ggvis được tác giả bởi cùng một người là ggplot2. Điểm quan trọng ở đây là việc sử dụng ggplot2 có phạm vi rộng đến mức không thể thực hiện các thay đổi mà không phá vỡ nhiều gói mã / gói phụ thuộc hiện có.
Roland

1
Đây có phải là loại tái cấu trúc gói có sẵn đã xảy ra giống như suy thoái kinh tế trong các xã hội tư bản?
qazwsx

2
@Peter: Là người ngoài cuộc với R, điều này đối với tôi có vẻ như nhận xét công bằng nhưng (hầu hết bất thường) bạn không trả lời câu hỏi!
Nick Cox

@NickCox Tôi đã trả lời một trong những câu hỏi trong câu hỏi. :-).
Peter Flom - Tái lập Monica

1
@Peter Điểm rất công bằng. Một tham chiếu chéo đến stats.stackexchange.com/questions/58966/ do tôi nghĩ là thích hợp do đó.
Nick Cox
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.