Violin Plot** รวม Box Plot และ Kernel Density Estimate (KDE) แสดงการกระจายตัวของข้อมูลละเอียดกว่า Box Plot เพียงอย่างเดียว ใน Seaborn ใช้ sns.violinplot() พารามิเตอร์ inner="quartile" จะแสดงเส้นควอไทล์ (Q1, Median, Q3) เป็นเส้นแนวนอนภายใน violin
ขั้นตอนการทำงาน
1. นำเข้าไลบรารี
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt
2. โหลดข้อมูล Cricketers.csv
dataFrame = pd.read_csv(r"C:\Users\amit_\Desktop\Cricketers.csv")
3. วาด Violin Plot พร้อม Quartiles
sns.violinplot(
x='Role',
y='Age',
order=["Batsman", "Bowler"],
data=dataFrame,
inner="quartile"
)
โค้ดตัวอย่างสมบูรณ์
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt
dataFrame = pd.read_csv(r"C:\Users\amit_\Desktop\Cricketers.csv")
# Violin plot พร้อม quartile lines
sns.violinplot(
x='Role',
y='Age',
order=["Batsman", "Bowler"],
data=dataFrame,
inner="quartile"
)
plt.show()
ผลลัพธ์
Violin plot แสดงการกระจายอายุ (Age) ของ Batsman และ Bowler ภายใน violin มีเส้นแนวนอน 3 เส้น: Q1 (ล่าง), Median (กลาง), Q3 (บน)

ค่า inner อื่นๆ
| ค่า inner | การแสดงผล |
|---|---|
"box" | Box plot ภายใน (default) |
"quartile" | เส้น Q1, Median, Q3 (แนวนอน) |
"point" | จุด median อย่างเดียว |
"stick" | เส้นแนวตั้งจาก center ไปจุดข้อมูล |
None | ไม่แสดงอะไรภายใน (แค่ KDE outline) |
พารามิเตอร์อื่นๆ ที่น่าสนใจ
# ควบคุมลำดับหมวดหมู่
order=["Batsman", "Bowler", "All-rounder"]
# แยกสีตาม hue
sns.violinplot(x='Role', y='Age', hue='Academy', data=df, inner="quartile", split=True)
# ปรับ bandwidth KDE
sns.violinplot(x='Role', y='Age', data=df, bw=0.2)
# Scale: 'area' (default), 'count', 'width'
sns.violinplot(x='Role', y='Age', data=df, scale='count', inner="quartile")
# ไม่ตัดหัวหาง violin
sns.violinplot(x='Role', y='Age', data=df, cut=0, inner="quartile")
Violin Plot vs Box Plot
- Box Plot: สรุปสถิติชัดเจน (median, quartiles, outliers) เร็ว อ่านง่าย
- Violin Plot: แสดง density distribution เต็มรูปแบบ เห็น modality (peaks) ได้
- ใช้ Violin ตอน EDA เพื่อดูรูปทรงการกระจาย ใช้ Box ตอนรายงาน/นำเสนอ