Nâng Cao Seaborn: Facets, Tương Quan & Phong Cách Chuyên Nghiệp
Seaborn là một trong những thư viện Python phổ biến nhất cho trực quan hóa dữ liệu. Nếu bạn đã nắm vững những kiến thức cơ bản (như biểu đồ phân tán, biểu đồ thanh, v.v.), hướng dẫn này sẽ giúp bạn nâng cao kỹ năng của mình.
Chúng ta sẽ đề cập đến:
- Faceting & small multiples
- Tương quan & heatmaps
- Xu hướng theo thứ tự/thời gian
- Phong cách & bảng màu
- Chú thích, ghi chú và lưu biểu đồ
- Những cạm bẫy thường gặp và mẹo chuyên nghiệp
Hãy bắt đầu nào! 👇
Faceting & Small Multiples
Faceting có nghĩa là chia dữ liệu của bạn thành các subplot theo danh mục. Điều này giúp việc so sánh trở nên dễ dàng hơn mà không làm rối một biểu đồ duy nhất.
Các Phương Pháp Thông Dụng
Phương Pháp | Mô Tả |
---|---|
FacetGrid |
Faceting linh hoạt, thấp cấp |
catplot / relplot |
Biểu đồ cấp cao với faceting tích hợp |
Ví Dụ 1: Biểu Đồ Thanh Faceted Theo Người Hút Thuốc
python
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset("tips")
sns.catplot(
data=tips, x="day", y="tip", hue="sex", col="smoker", kind="bar"
)
plt.suptitle("Tips theo Ngày (Faceted theo Người Hút Thuốc)", y=1.02)
plt.show()
Ví Dụ 2: Biểu Đồ Phân Tán với Facets
python
sns.relplot(
data=tips, x="total_bill", y="tip", hue="sex", col="time", kind="scatter"
)
plt.show()
Tương Quan & Heatmaps
Heatmaps tóm tắt các mối quan hệ số một cách trực quan. Chúng rất tốt để phát hiện các mẫu và sức mạnh của sự tương quan.
Ví Dụ 1: Heatmap Tương Quan Đơn Giản
python
corr = tips[["total_bill", "tip", "size"]].corr()
sns.heatmap(corr, annot=True, fmt=".2f", cmap="coolwarm", square=True)
plt.title("Tương Quan (tips)")
plt.show()
Ví Dụ 2: Heatmap Cụm (Nhóm Các Biến Tương Tự)
python
sns.clustermap(corr, annot=True, fmt=".2f", cmap="coolwarm")
plt.show()
👉 Mẹo Nhanh:
- Giá trị gần +1 hoặc -1 = mối quan hệ mạnh
- Giá trị gần 0 = mối quan hệ yếu hoặc không có
Xu Hướng Thời Gian/Đặt Hàng
Đối với các biến có thứ tự (như thời gian, kích thước hoặc chuỗi), biểu đồ đường là lý tưởng.
Ví Dụ: Tip Trung Bình Theo Kích Thước Bàn
python
avg = tips.groupby("size", as_index=False)["tip"].mean()
sns.lineplot(data=avg, x="size", y="tip")
plt.title("Tip Trung Bình Theo Kích Thước Nhóm")
plt.show()
Phong Cách, Bảng Màu & Bố Cục
Phong cách tốt = biểu đồ chuyên nghiệp.
Sử dụng sns.set_theme()
để áp dụng cài đặt toàn cục.
Các Tùy Chọn
Tham Số | Ví Dụ |
---|---|
style |
"white" , "whitegrid" , "dark" , "darkgrid" , "ticks" |
palette |
"deep" , "muted" , "bright" , color_palette() |
context |
"notebook" , "talk" , "paper" , "poster" |
Ví Dụ: Biểu Đồ Phân Tán Đã Được Thể Hiện
python
sns.set_theme(style="whitegrid", context="talk", palette="deep")
ax = sns.scatterplot(data=tips, x="total_bill", y="tip", hue="sex")
ax.set_title("Tips so với Tổng Hóa Đơn")
ax.set_xlabel("Tổng Hóa Đơn ($)")
ax.set_ylabel("Tip ($)")
sns.despine()
plt.tight_layout()
plt.show()
Chú Thích, Ghi Chú & Lưu
Luôn ghi rõ biểu đồ và lưu ở độ phân giải cao cho các báo cáo.
Ví Dụ: Biểu Đồ Hồi Quy Có Ghi Chú
python
ax = sns.regplot(data=tips, x="total_bill", y="tip")
ax.annotate("Tips cao hơn với hóa đơn cao hơn",
xy=(40,7), xytext=(25,8.5),
arrowprops=dict(arrowstyle="->", color="white"))
# Xóa chú thích nếu không cần thiết
ax.legend_.remove() if ax.legend_ else None
plt.tight_layout()
plt.savefig("tips_scatter.png", dpi=300, bbox_inches="tight", transparent=True)
plt.show()
Hàm Cấp Figure và Axes
Loại | Ví Dụ | Khi Nào Sử Dụng |
---|---|---|
Cấp Axes | scatterplot , lineplot , histplot , boxplot , violinplot , heatmap , regplot |
Quản lý các subplot bằng tay |
Cấp Figure | relplot , catplot , jointplot , pairplot , lmplot |
Lưới/facet tự động |
👉 Quy tắc chung:
- Cấp Axes = nhiều kiểm soát, bố cục thủ công
- Cấp Figure = lưới nhanh, ít mã hơn
Những Cạm Bẫy Thường Gặp (và Giải Pháp)
Vấn Đề | Giải Pháp |
---|---|
Quá nhiều điểm chồng chéo | Sử dụng alpha=0.5 , hexbin , hoặc kdeplot |
Nhãn mặc định không rõ ràng | Luôn thiết lập tiêu đề, nhãn, chú thích |
So sánh nhóm kém | Sử dụng violinplot /boxplot + stripplot thay vì trung bình thanh |
Màu sắc không đồng nhất | Giữ một bảng màu xuyên suốt các biểu đồ liên quan |
Repo link — GitHub
Thực Hành Tốt Nhất
- Luôn đặt tên cho các biến: Giúp mã dễ đọc và bảo trì hơn.
- Sử dụng chú thích rõ ràng: Giúp người khác hiểu rõ hơn về mã của bạn.
Các Trường Hợp Khó Xử
- Nếu gặp phải lỗi khi tải dữ liệu, hãy kiểm tra đường dẫn và định dạng tệp.
- Đảm bảo rằng bạn đã cài đặt tất cả các thư viện cần thiết trước khi chạy mã.
Hãy thử nghiệm với các tùy chọn khác nhau trong Seaborn để tìm ra phong cách trực quan hóa phù hợp nhất với dữ liệu của bạn!