Best Practices for Data Visualization
อ.ดร. สมศักดิ์ จันทร์เอม
วิทยาลัยนานาชาตินวัตกรรมดิจิทัล มหาวิทยาลัยเชียงใหม่
16 พฤศจิกายน 2568
แนะนำรายวิชา / หัวข้อ
Best Practices for Data Visualization
- ทำไมต้องสร้างภาพข้อมูล?
- หลักการออกแบบกราฟที่ดี
- ตัวอย่างด้วย ggplot2, plotly, quantmod
🎯 เป้าหมาย:
ให้นักศึกษาเข้าใจหลักการพื้นฐาน และเลือกใช้กราฟ + เครื่องมือได้เหมาะสม
ทำไมต้อง Data Visualization?
- ช่วย สรุปข้อมูลจำนวนมาก ให้ดูง่าย
- ทำให้เห็น แนวโน้ม (trend) และ pattern
- ช่วยสื่อสารกับผู้บริหาร / ลูกค้า / เพื่อนร่วมงาน
- ใช้ในการเรียนการสอน และงานวิจัยได้ดีมาก
Visualization = Communication with Data
1. รู้เป้าหมาย (Know Your Purpose)
- เราต้องการตอบคำถามอะไรจากข้อมูลชุดนี้?
- ผู้ชมควร “เห็นอะไรเป็นอย่างแรก”?
- กราฟนี้ช่วยสนับสนุนการตัดสินใจอะไร?
2. รู้จักผู้ชม (Know Your Audience)
- ผู้บริหาร: ต้องการภาพรวม, KPI, dashboard
- นักศึกษา: ต้องการตัวอย่าง, step-by-step, คำอธิบาย
- นักวิจัย: ต้องการรายละเอียดเชิงสถิติ, สมมติฐาน, CI
- Public: กราฟต้องง่าย อ่านได้เร็ว
ปรับ “ความลึกของข้อมูล” ให้เหมาะกับผู้ชม
3. เลือกประเภทกราฟให้เหมาะสม
| เปรียบเทียบกลุ่ม |
Bar chart, dot plot |
| แนวโน้มตามเวลา |
Line chart |
| การกระจายตัว |
Histogram, Density, Boxplot |
| ความสัมพันธ์ |
Scatter plot |
| สัดส่วน |
Pie/Treemap (ใช้เท่าที่จำเป็น) |
| ข้อมูลหุ้น |
Candlestick / OHLC |
ตัวอย่าง ggplot2: Histogram
ตัวอย่าง ggplot2: Scatter Plot
4. ทำให้เรียบง่าย (Keep It Simple)
หลีกเลี่ยง:
- สีเยอะเกินไป
- Grid หนาและรก
- 3D ที่ไม่ได้เพิ่มข้อมูล
- ข้อความเยอะเกินไปในกราฟเดียว
ให้ “ข้อมูล” เป็นพระเอก ไม่ใช่เอฟเฟกต์
5. ใช้สีอย่างมีความหมาย
หลักการ:
- ใช้สีช่วยแยกกลุ่ม / เน้นจุดสำคัญ
- ใช้สีที่คนตาบอดสีเห็นได้ดี (เช่น Viridis, ColorBrewer)
- สี = ความหมาย ต้องสม่ำเสมอทั้งรายงาน
ตัวอย่าง Color Scale ด้วย plotly
6. Label ให้ชัดเจน
- ชื่อกราฟควร “เล่า insight” ไม่ใช่แค่ “Scatter Plot”
- แกนต้องมีหน่วย
- Legend ชัดเจน
- ถ้าเป็นไปได้ใช้ direct label ใกล้จุดข้อมูล
ตัวอย่าง Label ดี (ggplot2)
7. เล่าเรื่องด้วยข้อมูล (Tell a Story)
- ใช้ annotation เพื่อเน้นจุดสำคัญ
- ใส่คำอธิบายสั้น ๆ ในกราฟ
- เรียงลำดับกราฟให้เป็นเรื่องเดียวกัน (จาก overview → detail)
ตัวอย่าง Annotation (ggplot2)
ตัวอย่างที่ 1: Scatter Plot
- กราฟที่ออกแบบ ไม่ดี: สีแรง, background รบกวน, ไม่มี label ที่สื่อความหมาย
- กราฟที่ออกแบบ ดี: สีเรียบ, theme สะอาด, title เล่า insight, แกนมีหน่วย
ตัวอย่างที่ 2: Bar Plot
ใช้ bar plot เพื่อแสดง “ยอดขายตามประเภทสินค้า”:
- กราฟแย่: title กว้าง ๆ, ไม่มีแกน y ชัดเจน, สีเยอะเกินเหตุ
- กราฟดี: สีเดียวเน้นเปรียบเทียบสูง–ต่ำ, ใส่ label บนแท่ง, axis label ชัดเจน
ตัวอย่างที่ 3: Histogram
เราจะเปรียบเทียบ:
- กราฟแย่: สีแรง, binwidth ไม่เหมาะสม, ไม่มี label
- กราฟดี: binwidth เหมาะสม, สีเรียบ, label ชัด
ตัวอย่างที่ 4: Time Series Line Plot
ใช้ข้อมูลจำลองแสดงแนวโน้มยอดขายรายเดือน:
- กราฟแย่: เส้นสีฉูดฉาด, จุดเยอะเกิน, ไม่มีวันที่/หน่วย
- กราฟดี: เส้นเรียบ, label แกนเวลา, title บอก insight
ตัวอย่างที่ 5: Pie Chart vs Bar Chart
ใช้ข้อมูลสัดส่วนประเภทลูกค้า:
- Pie แย่: ยากต่อการเปรียบเทียบความแตกต่างเล็กน้อย
- Bar ดี: เปรียบเทียบความสูงได้ชัดกว่า
ตัวอย่างที่ 6: Legends & Facets (รก vs ชัดเจน)
ในหลายกรณี การใช้ legend หลายสีในกราฟเดียวทำให้รก การใช้ facet แยกกราฟต่อกลุ่ม ช่วยให้เปรียบเทียบง่ายขึ้น
ตัวอย่างที่ 8: Density Plot
ตัวอย่างที่ 9: กราฟเส้นหลายกลุ่ม
ตัวอย่างที่ 10: Scale ผิด vs Scale ถูก
ตัวอย่างที่ 11: ใช้สีมาก vs ใช้สีน้อย
ตัวอย่างที่ 12: Annotation
ตัวอย่างที่ 14: Correlation Matrix
ตัวอย่างที่ 15: Time Series Forecast Vis.
ที่นี่โฟกัสที่ “การนำเสนอ” ไม่ใช่ความซับซ้อนของโมเดล
ตัวอย่างที่ 16: Candlestick Chart
กราฟนี้ “แย่” เพราะ รก ไม่มีโฟกัส และเล่าเรื่องไม่ชัด
Candlestick ที่ออกแบบดี (quantmod)
กราฟที่สอง “ดี” เพราะ เรียบง่าย เลือกเฉพาะสิ่งสำคัญ และช่วยให้คนดูเข้าใจ message ได้ทันที
ตัวอย่างที่ 17: Candlestick Chart – Bad vs Good (plotly)
BAD: ไม่มีชื่อแกน, ไม่มี title, ไม่มี hover ที่ชัดเจน (ค่า default อย่างเดียว)
GOOD: มี title, axis label, ชัดเจนว่าเป็นอะไร
ตัวอย่างที่ 18: Map Visualization (Choropleth)
ตัวอย่างที่ 19: Dashboard Layout
ตัวอย่างที่ 20: Infographics Design Principles (แนวคิด)
หลักการออกแบบ Infographic ที่ดี (ไม่ใช่แค่สวย แต่ต้องสื่อสารได้)
- มี ข้อความหลัก (key message) ชัดเจน
- ใช้ โครงร่าง (layout) ที่นำสายตา: บน → ล่าง, ซ้าย → ขวา
- ใช้ ไอคอน/รูปภาพ อย่างพอดี ไม่รบกวนสาระ
- ใช้ สี เพื่อเน้นลำดับความสำคัญ ไม่ใช่เพื่อโชว์ว่ามีสีเยอะ
- ตัวหนังสือไม่เยอะเกินไป: ใช้ bullet + keyword
- เว้น “space” ให้หายใจ (white space)
ตัวอย่าง “แย่”:
- ใช้ฟอนต์หลายแบบ/หลายสีในแผ่นเดียว
- ใส่รูป/ไอคอนเยอะจนกลบข้อมูล
- ไม่มีจุดโฟกัสหลัก (ผู้ชมไม่รู้จะมองตรงไหนก่อน)
ตัวอย่าง “ดี”:
- มีหัวเรื่องชัดเจน + tagline สั้น ๆ
- ข้อมูลหลักแสดงด้วยกราฟ/ไอคอนเพียง 2–3 ชิ้น
- สีไม่เกิน 3–4 สี, มี contrast ชัดเจน
🎨 Color Theory in Data Visualization
การเลือกใช้สีเป็นหนึ่งในปัจจัยสำคัญของ Data Visualization ที่ส่งผลต่อความเข้าใจ ความชัดเจน และความสวยงามของกราฟ
สีที่ดีช่วยให้ “ข้อมูลเด่นขึ้น”
สีที่แย่ทำให้ผู้ชม “สับสน หรืออ่านค่าผิด”
เราจะแบ่งประเภทของสีออกเป็น 4 แบบหลัก
1) 🎯 Single-Hue Color
ใช้เมื่อข้อมูลมี ค่าเดียว ไม่มีหมวดหมู่หลายกลุ่ม
เหมาะกับ dashboard ที่ต้องการความเรียบง่าย
2) 🌈 Sequential Color
ใช้สำหรับข้อมูลที่ เรียงลำดับ เช่น น้อย → มาก เหมาะกับ: heatmap, histogram, density
3) 🔵⚪🔴 Diverging Color
ใช้สำหรับข้อมูลที่มี ค่ากลางมีความหมาย เช่น 0, average, baseline
เหมาะกับ:
correlation matrix
change from baseline
4) 🎨 Qualitative Color
ใช้เมื่อข้อมูลเป็น หมวดหมู่ (categorical) สีกลุ่มต้อง “ต่างกันชัดเจน” แต่ไม่จำเป็นต้องเข้มอ่อนตามลำดับ
❌ vs ✔ ตัวอย่างสีแย่ vs สีดี
ตอนนี้เราจะดูว่าการเลือกสีผิดพลาดทำให้ตีความข้อมูลผิดได้อย่างไร
Bad vs Good ①: Rainbow Scale ❌
“สีรุ้ง” ไม่ควรใช้ เพราะ
- ลำดับสีไม่ต่อเนื่อง
- เกิด illusion ว่ามีจุดกระโดด
- ไม่เหมาะกับคนตาบอดสี
Bad vs Good ②: Qualitative vs Sequential ❌
สีผิดประเภท → สับสนได้ง่ายมาก
Bad vs Good ③: สีใกล้กันเกินไป ❌
กลุ่มจะดูเหมือน “ค่าเดียวกัน”
🎯 สรุปหลักการเลือกใช้สี
- ใช้สีตามประเภทของข้อมูล
- หลีกเลี่ยงสีรุ้ง (rainbow)
- เลือก palette ที่อ่านง่าย เช่น Viridis
- สำหรับค่ามีน้ำหนัก → sequential
- สำหรับค่าลบ/บวก → diverging
- สำหรับหมวดหมู่ → qualitative
- สีควรมี contrast ชัดเจน
🎨 Sequential Palette (ค่ามีน้ำหนัก / มีลำดับ)
เหมาะกับข้อมูล numeric ที่มีลำดับ เช่น น้อย → มาก ใช้เพื่อเน้น ความต่อเนื่อง ของข้อมูล
🎨 ตัวอย่างค่า sequential (10 สี)
![]()
🔵⚪🔴 2) Diverging Palette (ค่าลบ/บวก / มีจุดกึ่งกลาง)
ใช้เมื่อข้อมูลมี “ค่า 0” หรือ “ค่ากลาง” ที่มีความหมาย เช่น
- ผลต่าง (difference)
- ค่าลบ–บวก
- ค่า deviation
🎨 ตัวอย่างค่า diverging (RdBu)
![]()
🎨 3) Qualitative Palette (ข้อมูลแบบหมวดหมู่)
ใช้เมื่อข้อมูลเป็น Category เช่น
- A, B, C
- ประเทศ
- กลุ่มนักศึกษา
สีต้อง “ต่างกันชัดเจน” ไม่ใช่สีไล่ระดับ
🎨 ตัวอย่างค่า qualitative (Set2)
![]()