สำหรับการวางแผนด้วย R ฉันควรเรียนรู้ ggplot2 หรือ ggvis หรือไม่


38

สำหรับการวางแผนด้วย R ฉันควรเรียนรู้ ggplot2 หรือ ggvis หรือไม่ ฉันไม่ต้องการเรียนรู้ทั้งสองอย่างถ้าหนึ่งในนั้นดีกว่าไม่ว่าในเรื่องใด เหตุใดชุมชน R จึงยังคงสร้างแพ็คเกจใหม่ด้วยฟังก์ชันที่ทับซ้อนกันอยู่ โพสต์แนะนำบล็อกไม่ได้พูดถึงคำว่าทำไม ggvis ถูกสร้างขึ้นให้ว่าพล็อตที่มีความซับซ้อนแพคเกจ ggplot2 มีอยู่แล้ว


5
ggvis เป็นกาต้มน้ำของปลาที่แตกต่างกันอย่างสิ้นเชิง ทางเลือกที่แท้จริงอยู่ระหว่าง ggplot และตาข่าย
งานกาล่า

1
ฉันคิดว่าคำตอบนั้นขึ้นอยู่กับว่าคุณทำอะไร ggplot2หากคุณกำลังมองหาแปลงขั้นสูงคงที่คุณจะต้องการที่จะเรียนรู้ ggvisสำหรับการแสดงเว็บพิจารณา
Roman Luštrik

คำตอบ:


39

เริ่มต้นด้วย ggplot2 มันสร้างแปลงคงที่

นอกเหนือจากแปลงคงที่ ggvis สามารถใช้สำหรับการสร้างแปลงแบบโต้ตอบเช่นกัน เมื่อคุณเรียนรู้ไวยากรณ์ของ ggplot2 แล้วไวยากรณ์สำหรับเพิ่มการโต้ตอบเพื่อสร้างแผนการ ggivs จะเป็นไปตามธรรมชาติ


4
นี่ไม่ถูกต้อง (อาจถูกต้องในขณะที่เขียน) ggvis สามารถนำมาใช้เพื่อสร้างแปลงคงที่แน่นอน ความจริงที่ว่ามันยังช่วยให้การแปลงเชิงโต้ตอบเป็นคุณลักษณะที่ไม่ จำกัด ตัวอย่างง่ายๆของพล็อตคงที่:library('ggvis'); mtcars %>% ggvis(~wt, ~mpg) %>% layer_points(fill = ~factor(cyl))
Andre Terra

46

ฉันต้องการขยายคำตอบของ Dianne Cook เล็กน้อย อย่างที่เธอบอกว่า ggplot2 นั้นใช้สำหรับสร้างแปลงคงที่ ggvis สำหรับแปลงเชิงโต้ตอบ มีความหมายมากมายดังนี้:

ประเภทไฟล์ ggvis output เป็น HTML รวมถึงไฟล์ CSS และไฟล์จาวาสคริปต์ 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 ซึ่งไม่มี analog สำหรับ ggvis แผนการ ggplot2 ทั้งหมดดูเหมือนว่าพวกเขาถูกสร้างขึ้นโดยคนคนเดียวกัน (ผู้เขียน ggplot2) และนั่นก็เหนื่อยล้าไปซักพัก

ความสมบูรณ์ มีประเภทของพล็อตที่คุณสามารถสร้างใน ggplot2 ซึ่ง ggvis ไม่สนับสนุนอย่างน้อยก็จนถึงตอนนี้ ตัวอย่างเช่นไม่มีองค์ประกอบพล็อต "Rug" ใน ggvis ฉันเคยเห็นหนึ่งหรือสองคนที่สร้างขึ้นด้วย ggvis แต่ก็ยังไม่มีการสนับสนุนในตัวตามธรรมชาติ ggplot2 มีพิกัดเชิงขั้ว (เช่นแผนภูมิวงกลม) ggvis ไม่มี ยังขาดหายไปจาก ggvis (และสามารถใช้ได้ทั้งใน ggplot2 หรือในส่วนขยาย ggplot2): boxplots; แปลงโครงร่าง แผ่นความร้อนตามธรรมชาติ แผนภูมิสหสัมพันธ์ตามธรรมชาติ dotplots; แปลงไวโอลิน; แปลงเครือข่าย dendrograms แน่นอนฉันแน่ใจว่าคนที่ฉลาดมากบางคนสามารถสร้างสิ่งเหล่านี้ใน ggvis แต่ฉันไม่ใช่คนฉลาด

คำอธิบายประกอบ ggplot2 มีกรอบคำอธิบายประกอบที่ดีมากอาจใช้ไม่ได้ ggvis ไม่ได้

Subplots & Facets ggplot2 มีคุณสมบัติ "faceting" ที่ค่อนข้างดี แต่อาจจะค่อนข้าง จำกัด คุณสามารถรวมหลาย ggplot2 แปลงโดยใช้แพ็คเกจกริด ณ ตอนนี้คุณไม่สามารถทำได้ด้วย ggvis แผนการ ggvis ไม่สามารถรวมกันเป็นภาพเดียว (เพราะไม่ใช่ภาพพวกมันเป็นหน้าเว็บ "สด") และไม่สนับสนุนการเผชิญหน้าหรือการย่อยใด ๆ นี้ควรจะอยู่ในท่อ

Visual Flexibility ggplot2 ต้องการให้ทุกพล็อตมีหน้าตาเหมือนกันซึ่งหมายความว่าเหมือนผู้เขียนชอบโวหาร ตัวอย่างเช่นไม่มีวิธีที่จะมีพล็อตที่มีแกน y หลายแกนใน ggplot2 ggvis สามารถ ggvis มีความยืดหยุ่นมากกว่า ggplot2 มาก มันง่ายกว่ามากที่จะทำสิ่งต่าง ๆ เช่นซ่อนตำนานรวมหลายตำนานเข้าด้วยกันใช้ตาชั่งที่แตกต่างกันสำหรับสิ่งต่าง ๆ ในพล็อตเดียวกัน ฯลฯ

ความสามารถในการปรับแต่งลึกหากคุณต้องการสร้างพูดมาตราส่วนที่ฉลาดใหม่มันไม่ยากเกินไปที่จะทำเช่นนั้นใน ggplot2 (แม้ว่ามันจะค่อนข้างสับสนก็ตาม) ดูเหมือนจะไม่มีทางทำสิ่งต่างๆมากมายใน ggvis อาจจะเป็นเพียงแค่ยังไม่ได้

อนุกรมเวลา ggplot2 ไม่ชอบลงจุดอนุกรมเวลา มันสามารถแต่ก็ไม่ได้ต้องการที่จะ จริงๆแล้วทั้งสองคนไม่ต้องการ ทั้งยืนยันว่าเป็นข้อมูลที่ถูกป้อนใน data.frame และพวกเขาไม่สามารถจัดการวัตถุ xts หรือสวนสัตว์ได้ พวกเขาไม่มีคุณสมบัติในตัวสำหรับการแบ่งซีรีย์เวลา แต่ ggvis ไม่ได้ต่อสู้กับซีรีย์เวลายากเท่า ggplot2 นั่นเป็นส่วนหนึ่งเพราะมันเร็วมากในการอัพเดทข้อมูลในพล็อต ggvis ฉันคิดว่า หากคุณต้องการพล็อตชุดไทม์แมชชีนคุณจะต้องเอาชนะทั้งการยอมจำนน แต่ ggvis นั้นไม่ค่อยจริงจังกับมันมากนัก

เป็นไวยากรณ์เดียวกันหรือไม่ การเรียงลำดับของ ... มีหลายอย่างที่เหมือนกันระหว่างพวกเขาและการเรียนรู้ที่จะคิดในรูปแบบหนึ่งจะช่วยปรับให้เข้ากับสไตล์ของอีกคนหนึ่ง โดยเฉพาะอย่างยิ่งทั้งสองได้รับการออกแบบเพื่อให้ทุกสายเรียกเข้าพล็อตเข้าด้วยกันในรหัสบรรทัดเดียว ข้อได้เปรียบหลักของการทำเช่นนี้คือการทำให้การดีบักและการทำโปรไฟล์ยากมาก นอกจากนั้นพวกเขายังมีความแตกต่างทางด้านวากยสัมพันธ์ บางสิ่งที่ยากใน ggplot2 นั้นง่ายใน ggvis สิ่งที่ง่ายใน ggplot2 นั้นเป็นไปไม่ได้ใน ggvis และในทางกลับกัน. (ฉันมีความชอบเล็กน้อยสำหรับวิธีที่ ggvis ทำสิ่งต่าง ๆ ซึ่งฉันเข้าใจได้ง่ายขึ้น)

บั๊กส์ ยังคงมีไม่กี่คน บางครั้งมันก็มีพฤติกรรมแปลก ๆ แม้ว่าบางครั้งพล็อตจะหายไปแบบสุ่มด้วยเหตุผลที่ต้องใช้เวลาหลายชั่วโมงในการหลีกเลี่ยงและทำความเข้าใจน้อยมาก นักพัฒนายอมรับสิ่งนี้ได้อย่างอิสระ ggvis ยังไม่พร้อมสำหรับการผลิต หากคุณจัดการกับความซับซ้อนใด ๆ คุณจะพบว่าพวกเขาไม่ได้ล้อเล่น

บรรทัดล่าง: การเรียนรู้การวางแผนขั้นกลางในแต่ละใช้เวลาประมาณ 16 ชั่วโมง คุณอาจเรียนรู้ทั้งคู่


1
การเปรียบเทียบที่ดี
skan

ggvis เร็วขึ้นหรือขัดแตะหรือ rgl คืออะไร? (สำหรับชุดข้อมูลขนาดใหญ่)
skan

+1 เขียนที่ยอดเยี่ยม ฉันเห็นด้วยกับทุกสิ่งที่นี่ตามประสบการณ์ของฉันกับทั้งสอง
David Crook

สวัสดีแล้ว ggvis vs rcharts ล่ะ?
skan

TIME SERIES: ggplot2 ชนะด้วยการขยาย ggfortify อย่างแน่นอน ดูเอกสารประกอบที่ยอดเยี่ยมเกี่ยวกับมันrpubs.com/sinhrks/basics
Archimede

10

ฉันคิดว่าข้อความที่ปรากฏหลังจากนั้นlibrary(ggvis)เป็นการอธิบายตนเอง:

ggvis API กำลังพัฒนาอย่างรวดเร็วในขณะนี้ เราขอแนะนำอย่างยิ่งให้คุณไม่ต้องพึ่งเรื่องนี้ในการผลิต แต่อย่าลังเลที่จะสำรวจ หากคุณพบข้อผิดพลาดที่ชัดเจนโปรดยื่นเป็นตัวอย่างที่สามารถทำซ้ำได้น้อยที่สุดที่https://github.com/rstudio/ggvis/issues สำหรับคำถามและการอภิปรายอื่น ๆ โปรดใช้https://groups.google.com/group/ggvis

เมื่อเทียบกับ ggplot2 ggvis ยังขาดคุณสมบัติบางอย่างและขัดเงา (ไม่สามารถเพิ่มหัวเรื่องลงในกราฟได้เช่นชื่อแกนซ้อนทับกับป้ายกำกับขีดและมีอีกมากไม่รองรับการทำหน้าตาเป็นต้น) ในทางกลับกัน ggvis รู้สึกว่า ทำความสะอาดเล็กน้อยและการโต้ตอบก็ยอดเยี่ยมจริงๆ

จากประสบการณ์ของฉันเอง ggvis เป็นสิ่งที่จำเป็นถ้าคุณกำลังสร้างแอพมันวาว จากนั้นประโยชน์ของการมีเว็บและ R กราฟที่เป็นมิตรกับการวางแผนเครื่องยนต์นั้นมีมากกว่าข้อบกพร่องที่มีอยู่ในขณะนี้

หากคุณต้องการทำกราฟแบบคงที่สำหรับการสำรวจข้อมูล ggplot2 เป็นไลบรารีสำหรับผู้ใหญ่ที่มีคุณสมบัติเจ๋ง ๆ มากมายพร้อมชุมชนผู้ใช้ที่มีสุขภาพดีและแหล่งข้อมูลมากมายที่จะเรียนรู้จาก

ปรัชญาที่อยู่เบื้องหลังแพ็คเกจทั้งสองมีความคล้ายคลึงกันดังนั้นทักษะจึงสามารถถ่ายโอนได้ง่ายจากแพ็คเกจหนึ่งไปอีกแพ็คเกจหนึ่ง


8

ชุมชน R กำลังเกิดขึ้นพร้อมกับแพ็คเกจใหม่ (และทับซ้อนกัน) ด้วยเหตุผลหลายประการ:

1) บางคนต้องการเปลี่ยนบางสิ่งบางอย่างหรือเพิ่มสิ่งที่ไม่มีอยู่ในแพ็คเกจที่มีอยู่ แต่ส่วนใหญ่ทับซ้อนกัน (จึงมีหลายแพ็คเกจที่ถดถอย)

2) บางคนเขียนแพ็คเกจเป็นงานที่มอบหมาย

3) การเขียนแพ็คเกจเป็นเรื่องสนุก (ถ้าคุณชอบสิ่งนั้น)

4) พวกเขาไม่ทราบว่ามีแพ็คเกจเดิมอยู่


9
เกี่ยวกับตัวอย่างที่เฉพาะเจาะจงและประเด็นที่ 4 ของคุณ: ggvis เขียนโดยคนเดียวกันกับ ggplot2 จุดสำคัญที่นี่คือการใช้ ggplot2 นั้นแพร่หลายมากจนเป็นไปไม่ได้ที่จะใช้การเปลี่ยนแปลงโดยไม่ทำลายโค้ด / แพ็กเกจที่ขึ้นกับแพคเกจที่มีอยู่จำนวนมาก
Roland

1
การประดิษฐ์แพคเกจที่มีอยู่ก่อนหน้านี้เป็นสิ่งที่เกิดขึ้นเช่นเดียวกับภาวะถดถอยทางเศรษฐกิจในสังคมทุนนิยมหรือไม่?
qazwsx

2
@ Peter: ในฐานะคนนอกสำหรับ R ฉันดูเหมือนว่าจะชอบความคิดเห็นที่ยุติธรรม แต่ (ส่วนใหญ่ผิดปกติ) คุณไม่ตอบคำถาม!
Nick Cox

@NickCox ฉันตอบคำถามข้อใดข้อหนึ่งในคำถาม :-)
Peter Flom - Reinstate Monica

1
@Peter เป็นจุดที่ยุติธรรมมาก การอ้างอิงโยงไปยังstats.stackexchange.com/questions/58966/ …ฉันคิดว่าตรงประเด็นดังนั้น
Nick Cox
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.