stripplot dùng jitter (nhiễu ngẫu nhiên) để tách điểm, nhưng vẫn có thể chồng chéo. Swarmplot sắp xếp điểm theo thuật toán "bee swarm" đảm bảo **không chồng chéo** mà không cần jitter.
Ví dụ swarmplot trên dataset Iris
import pandas as pd
import seaborn as sb
from matplotlib import pyplot as plt
my_df = sb.load_dataset('iris')
sb.swarmplot(x="species", y="petal_length", data=my_df)
plt.show()
Giải thích
- Mỗi điểm = một quan sát, vị trí y = giá trị thực, vị trí x = sắp xếp để không chồng chéo.
- Thấy rõ toàn bộ phân bố, mật độ, outlier, gaps.
- Phù hợp dữ liệu nhỏ-vừa (< ~300 điểm/nhóm).
So sánh stripplot vs swarmplot
| Tiêu chí | stripplot + jitter | swarmplot |
|---|---|---|
| Chồng chéo | Có thể vẫn chồng | Không bao giờ chồng |
| Độ chính xác vị trí x | Gần đúng (có nhiễu) | Chính xác (tối ưu) |
| Hiệu năng | O(n) - nhanh | O(n²) - chậm |
| Dữ liệu lớn | OK | Không khuyến khích |
Khuyến nghị
Dữ liệu nhỏ → swarmplot đẹp, chính xác. Dữ liệu lớn → stripplot(jitter=True, alpha=0.5) hoặc violinplot/boxplot.