Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Python Pandas - วาด Swarm Plot ทับ Box Plot ด้วย Seaborn

การรวม Box Plot** (สรุปสถิติ) และ Swarm Plot** (จุดข้อมูลจริง) ให้ภาพลักษณะข้อมูลครบถ้วน วาด Box Plot ก่อน แล้วทับ Swarm Plot ด้วยพารามิเตอร์ whis=np.inf เพื่อให้ whiskers ครอบจุดข้อมูลทั้งหมด

ขั้นตอนการทำงาน

1. นำเข้าไลบรารี

import seaborn as sns
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

2. โหลดข้อมูล Cricketers2.csv

dataFrame = pd.read_csv(r"C:\Users\amit_\Desktop\Cricketers2.csv")

3. ตั้ง theme และวาด Box + Swarm

sns.set_theme(style="whitegrid")

# Box plot: whis=np.inf ทำให้ whiskers ยื่นถึงข้อมูลสุดท้าย (ไม่มี outliers)
sns.boxplot(x="Matches", y="Role", data=dataFrame, whis=np.inf)

# Swarm plot ทับบน box plot
sns.swarmplot(x="Matches", y="Role", data=dataFrame, color=".3")

โค้ดตัวอย่างสมบูรณ์

import seaborn as sns
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

dataFrame = pd.read_csv(r"C:\Users\amit_\Desktop\Cricketers2.csv")
sns.set_theme(style="whitegrid")

# Box plot พร้อม whiskers ครอบทั้งข้อมูล
sns.boxplot(x="Matches", y="Role", data=dataFrame, whis=np.inf)

# Swarm plot ทับบน box plot สีเทา .3
sns.swarmplot(x="Matches", y="Role", data=dataFrame, color=".3")

plt.show()

ผลลัพธ์

กราฟแนวนอน: แกน Y = Role, แกน X = Matches กล่อง (box) ครอบข้อมูลทั้งหมด (whis=np.inf) จุดข้อมูล (swarm) กระจายอยู่บนกล่อง

Python Pandas - วาด Swarm Plot ทับ Box Plot ด้วย Seaborn

คำอธิบาย whis=np.inf

  • ค่าเริ่มต้น whis=1.5 → whiskers ยื่นถึง 1.5×IQR จุดนอกเหลือเป็น outliers
  • whis=np.inf → whiskers ยื่นถึง min/max ของข้อมูล ไม่มี outliers
  • เหมาะเมื่อต้องการให้ Box Plot ครอบข้อมูลทั้งหมด ก่อนทับ Swarm Plot

ตัวเลือกการจัดสไตล์

# Swarm plot สีตาม hue
sns.swarmplot(x="Matches", y="Role", hue="Academy", data=dataFrame, palette="Set2")

# ปรับขนาดจุด
sns.swarmplot(x="Matches", y="Role", data=dataFrame, color=".3", size=5)

# Box plot สีอ่อน Swarm plot สีเข้ม
sns.boxplot(x="Matches", y="Role", data=dataFrame, whis=np.inf, color="lightblue")
sns.swarmplot(x="Matches", y="Role", data=dataFrame, color="darkblue")

เมื่อไหร่ใช้ Box+Swarm

  • ข้อมูลกลุ่มเล็ก-ปานกลาง (<100 points/group) → Swarm แสดงจุดหมดได้
  • ข้อมูลใหญ่ → ใช้ stripplot() (jitter) แทน Swarm
  • ต้องการดูทั้งสรุปสถิติและการกระจายจุดจริง