Lets-Plot: ไลบรารีพล็อตโอเพนซอร์สสำหรับข้อมูลสถิติ
(lets-plot.org)- Lets-Plot เป็นไลบรารีพล็อตแบบมัลติแพลตฟอร์มที่รองรับการทำภาพข้อมูลสถิติใน Python และ Kotlin โดยอิงหลักการ Grammar of Graphics
- มีการแยก implementation สำหรับ Python และ Kotlin ทำให้ใช้งานได้ตาม เวิร์กโฟลว์ของแต่ละ ecosystem ตั้งแต่สภาพแวดล้อมโน้ตบุ๊กไปจนถึง IDE และการพัฒนาแอป
- ใน Python สามารถดูพล็อตได้ทั้งในโน้ตบุ๊ก และใน SciView ของ PyCharm กับ IntelliJ IDEA
- ใน Kotlin มุ่งรองรับกรณีใช้งานด้านการทำภาพข้อมูล ตั้งแต่ Kotlin notebook ไปจนถึง Compose-Multiplatform apps
- มี geocoding, การพล็อต GeoDataFrame และการปรับแต่ง tooltip/annotation จึงใช้ได้กับ ข้อมูลเชิงพื้นที่ และการสร้างพล็อตแบบโต้ตอบได้
ภาพรวมของ Lets-Plot
- Lets-Plot เป็นไลบรารีพล็อตแบบมัลติแพลตฟอร์มที่อิงหลักการ Grammar of Graphics
- หากต้องการเรียนรู้ ggplot2 ควบคู่กับ Grammar of Graphics แนะนำให้ใช้ “ggplot2: Elegant Graphics for Data Analysis” ของ Hadley Wickham เป็นเอกสารอ้างอิง
- เอกสารเริ่มต้นและตัวอย่างมีให้ตามเส้นทางต่อไปนี้
แพลตฟอร์มที่รองรับและฟีเจอร์หลัก
-
Python
- เป็นไลบรารีทำภาพข้อมูลสำหรับ Python ที่ให้บริการในชื่อ Grammar of Graphics for Python
- ใช้งานได้ใน Python notebook
- สามารถดูพล็อตได้ใน SciView ของ PyCharm และ IntelliJ IDEA IDE ด้วย
-
Kotlin
- เป็นไลบรารีทำภาพข้อมูลแบบมัลติแพลตฟอร์มสำหรับ Kotlin ที่ให้บริการในชื่อ Grammar of Graphics for Kotlin
- มุ่งรองรับกรณีใช้งานใน ecosystem ของ Kotlin ตั้งแต่ Kotlin notebook ไปจนถึง Compose-Multiplatform apps
-
การทำภาพข้อมูลภูมิสารสนเทศ
-
Tooltip และ annotation
- สามารถปรับแต่งเนื้อหา รูปแบบค่า และรูปลักษณ์ของ tooltip และ annotation ในเลเยอร์ของพล็อตได้
1 ความคิดเห็น
ความเห็นจาก Hacker News
เจ๋งดี ดูเหมือนจะอิงกับ ไวยากรณ์กราฟิกแบบ ggplot2 ดูตัวอย่างได้ที่นี่: https://lets-plot.org/pages/charts.html
กราฟข้อมูลก็ดูดีทีเดียว: https://lets-plot.org/pages/charts.html#discrete-icon-discre...
กราฟการแจกแจงก็ดีเหมือนกัน: https://lets-plot.org/pages/charts.html#visualization-of-dis...
อยากรู้ว่าโปรเจ็กต์นี้เป็นอย่างไรเมื่อเทียบกับ
plotnineซึ่งเป็นไลบรารีพล็อตแบบ ggplot2 สำหรับ Pythonข้อเสียของไลบรารีตระกูล ggplot ที่ไม่ได้อยู่บน R คือคุณจะเสีย ไลบรารีเสริม ดีๆ จำนวนมหาศาลที่ใช้กับต้นฉบับได้ไป[1] ส่วนตัวผมมักประมวลผลข้อมูลใน Python เยอะๆ แล้วค่อยส่งออกไป R จากนั้นทำกราฟทั้งหมดที่นั่น
คนสายสถิติดูจะให้ความสำคัญกับกราฟิกมากกว่า และใช้เวลาขัดเกลาความสมบูรณ์มากกว่า อีกอย่าง Copilot ช่วยเรื่องความหมายเชิงแนวคิดและออปชันของ ggplot ฝั่ง R ได้ดีมาก เพราะมีแหล่งให้เรียนรู้เยอะ ไม่แน่ใจว่าจะทำได้ดีแค่ไหนกับความต่างเล็กๆ น้อยๆ ของไลบรารีเลียนแบบ ggplot ทั้งหลาย
[1] https://youtu.be/7UjA_5gNvdw
ถ้าให้บริบทมากพอ ก็น่าจะสร้างผลลัพธ์ที่ใช้งานได้พอสมควร
อันนี้ก็ดูคล้าย
plotnine[0] มากเหมือนกัน ซึ่งให้ interface แบบ ไวยากรณ์กราฟิก กับ Python ถึงอย่างนั้นผมก็ชอบ ggplot เลยตั้งตารอวันที่จะได้ลองใช้สิ่งนี้กับงานวิจัยน่าจะดีถ้าสามารถพอร์ตหรือเขียน
ggthemes,scientificplots[1] และไลบรารี ggplot อื่นๆ ใหม่บน lets-plot ได้0: https://plotnine.readthedocs.io/en/stable/
1: https://github.com/garrettj403/SciencePlots
ไม่เข้าใจว่าจำเป็นทำไม มีใครกำลังต้องการ ไลบรารีพล็อต เพิ่มอีกตัวอย่างเร่งด่วนด้วยเหรอ?
Seaborn ก็ดี แต่ก็ยังต้องรับมือกับ abstraction ที่รั่วของ matplotlib ทำให้เอามาประกอบกันยากขึ้น และยังได้ความโต้ตอบยากด้วย เพราะงั้นผมอยากได้อะไรแบบนี้ ผมอยากได้กราฟโต้ตอบที่ดี เร็ว และให้ความรู้สึกเนทีฟ จนถึงขั้นเคยลองจะทำเอง Ggplot ทำให้โฟกัสแค่ว่าอยากวาดอะไรแล้วใส่ dataframe เข้าไป ซึ่งอันนี้ก็ดูเป็นแบบนั้น
มีทิวทอเรียลหรือคู่มือที่เน้น Python สำหรับการสร้างกราฟด้วยแนวทาง ไวยากรณ์กราฟิก แบบนี้ไหม? หรือว่าต้องอ่านหนังสือ ggplot2 แล้วค่อยแปลงตัวอย่าง R เป็น Python?
https://vega.github.io/vega/docs/
ทั้งหมดนี้เป็น Kotlin Multiplatform และมีเพียง wrapper บางๆ ของ Python ครอบไว้อีกที น่าประหลาดใจทีเดียว
ปัญหาใหญ่ที่สุดของไลบรารีพล็อตคือมักจัดการกับ จุดข้อมูลหลายล้านจุด ได้ไม่ดีแบบทันที ในโปรเจ็กต์ด้านวิทยาศาสตร์ข้อมูลครั้งก่อน ฉันลองใช้ไลบรารีพล็อตหลัก ๆ มาหมดแล้ว แต่พอเกินไม่กี่ล้านจุดก็ไม่มีตัวไหนทำงานได้ดี
ฉันต้องการกราฟที่แสดงผลแบบเรียลไทม์และซูมเข้า/ออกได้ ซึ่งกลายเป็นส่วนที่ยากของโปรเจ็กต์ มีอยู่ผลิตภัณฑ์หนึ่งที่อ้างว่าสามารถทำได้ด้วย Cloud GPU แต่ต้องสมัครสมาชิกแบบเสียเงินและต้องอัปโหลดข้อมูลขึ้นคลาวด์ด้วย ฉันไม่ได้ต้องการแค่ไลบรารีอีกตัวหนึ่ง แต่ต้องการไลบรารีที่ใช้งานได้ดีจริงและสามารถใช้ Local GPU สำหรับการพล็อตได้
เลื่อนลงไปที่ตัวอย่างจะมีพล็อตที่มีจุดจำนวนมาก: https://wwwtyro.github.io/candygraph/examples/dist/
https://github.com/epezent/implot
Java: https://github.com/SpaiR/imgui-java
Rust ก็มี:
https://www.egui.rs/#Demo
ดู Open Plot demo ได้เลย บนเว็บก็น่าจะคอมไพล์เป็น WASM ได้ น่าจะทำเฉพาะส่วนกราฟเป็น WASM แล้วฝังลงใน DOM ที่มีอยู่เดิมได้
https://github.com/holoviz/datashader ก็เป็นตัวเลือกที่ใช้ได้ใน ecosystem ของ Python
ggplot2 ยอดเยี่ยมมากสำหรับการสำรวจข้อมูล นี่เคยเป็นจุดเด่นที่ R เหนือกว่าตัวอื่นอย่างชัดเจน
สำหรับแดชบอร์ด ฉันชอบ Apache ECharts มากกว่า:
https://github.com/ecomfe/awesome-echarts
เจ๋งมาก นี่คือการ นำ ggplot2 มาเขียนใหม่ บน Python ใช่ไหม?
pyggเป็นไลบรารีขนาดเล็กที่แปลงไวยากรณ์ ggplot ของ Python ให้เป็นโค้ด R ggplot2ข้อเสียคือมันไม่ใช่แบบโต้ตอบและไปรันบน R ส่วนข้อดีก็คือได้ใช้ implementation ggplot ของ Hadley บน R
https://github.com/sirrice/pygg
สำหรับฉัน รู้สึกน่าผิดหวังนิดหน่อยที่มัน ลอก ggplot มาโดยตรง ggplot ไม่ได้เป็นคำตอบสุดท้ายของการออกแบบไลบรารีด้าน visualization เสมอไป
ตัวอย่างเช่น ggplot มีแนวคิดเรื่อง scale ที่แทบจะเทียบได้กับฟังก์ชันแบบตรงตัว ซึ่งมีแต่จะเพิ่มความซับซ้อนเชิงแนวคิดที่ไม่จำเป็นให้กับไลบรารี การตัดสิ่งนี้ออกเป็นการปรับปรุงที่ทำได้ไม่ยาก
ส่วน matplotlib นั้น กว่าจะเข้าใกล้ได้ต้องใช้มันมามากในช่วงหลัง ๆ แถมยังต้องมี GitHub Copilot ด้วย