Courses
Seaborn là một trong những thư viện Python hàng đầu cho trực quan hóa dữ liệu thống kê. Xây dựng trên Matplotlib, nó tạo ra các biểu đồ trau chuốt với ít mã hơn, tích hợp sẵn với DataFrame của pandas, và xử lý các biểu đồ thống kê phổ biến—histogram, box plot, heatmap, hồi quy—thông qua một API nhất quán.
Trong hướng dẫn này, tôi sẽ đi qua các loại biểu đồ cốt lõi của Seaborn, cách tùy chỉnh chúng, và so sánh Seaborn với các thư viện trực quan hóa Python khác như Matplotlib và Plotly. Tất cả ví dụ mã dùng Seaborn 0.13+ và pandas 2.0+.
Tóm tắt nhanh
-
Seaborn là thư viện trực quan hóa thống kê Python xây dựng trên Matplotlib—cài đặt bằng
pip install seaborn -
Nó làm việc trực tiếp với pandas DataFrame: truyền tên cột vào các đối số
x,yvàhue -
Các loại biểu đồ chính:
scatterplot(),lineplot(),barplot(),histplot(),boxplot(),heatmap(),pairplot() -
Các hàm cấp figure (
relplot(),displot(),catplot()) tạo lưới nhiều panel chỉ với một lệnh gọi -
Tùy chỉnh giao diện bằng
set_theme()và bảng màu tích hợp
Seaborn là gì?
Seaborn là thư viện trực quan hóa dữ liệu Python xây dựng trên Matplotlib. Nó làm việc trực tiếp với pandas DataFrame, nên bạn truyền tên cột làm đối số thay vì mảng thô. Thư viện bao phủ hầu hết các kiểu biểu đồ thống kê phổ biến: scatter plot, line plot, bar plot, histogram, box plot, heatmap, và nhiều hơn nữa.
Seaborn tổ chức API của mình thành ba cấp:
-
Hàm cấp figure (
relplot(),displot(),catplot()) tạo toàn bộ lưới figure và tự động xử lý faceting -
Hàm cấp axes (
scatterplot(),histplot(),boxplot(), v.v.) vẽ lên một axes của Matplotlib -
Hàm tiện ích (
heatmap(),pairplot(),jointplot()) cho bố cục nhiều panel chuyên biệt
Bạn có thể tìm hiểu thêm về Seaborn với khóa học Nhập môn Trực quan hóa Dữ liệu với Seaborn của chúng tôi.
Seaborn đi kèm các chủ đề dựng sẵn và bảng màu bạn có thể áp dụng chỉ với một lệnh set_theme(). Nó cũng bao gồm ước lượng thống kê—khoảng tin cậy trên biểu đồ cột, hồi quy, ước lượng mật độ kernel—giúp bạn đi từ dữ liệu thô đến hình vẽ sẵn sàng xuất bản với tối thiểu mã nguồn.

Seaborn vs. Matplotlib
Hai thư viện trực quan hóa dữ liệu được dùng rộng rãi nhất trong Python là Matplotlib và Seaborn. Dù cả hai đều được thiết kế để tạo đồ họa và trực quan hóa chất lượng cao, chúng có một số khác biệt chính khiến mỗi thư viện phù hợp hơn cho các trường hợp sử dụng khác nhau.
Matplotlib cho bạn toàn quyền kiểm soát mọi thành phần của figure (axes, vạch chia, chú giải, ghi chú), nhưng sự kiểm soát đó đồng nghĩa nhiều mã hơn cho mỗi biểu đồ. Seaborn đánh đổi một phần mức độ chi tiết để lấy tốc độ: một lệnh gọi hàm với DataFrame là có ngay biểu đồ thống kê đã được tạo kiểu.
| Tính năng | Matplotlib | Seaborn |
|---|---|---|
| Mức trừu tượng | Cấp thấp (kiểm soát chi tiết) | Cấp cao (mặc định theo thống kê) |
| Kiểu dáng mặc định | Tối thiểu—cần tự định kiểu | Chủ đề sẵn sàng xuất bản tích hợp sẵn |
| Tích hợp DataFrame | Nhận mảng; hỗ trợ DataFrame bổ sung sau | Xây dựng xoay quanh pandas DataFrame |
| Tính năng thống kê | Không có tích hợp sẵn | Khoảng tin cậy, hồi quy, KDE |
| Bố cục nhiều panel | Thủ công với subplots() |
Tự động với FacetGrid, relplot() |
| Tốt nhất cho | Figure tùy biến, không theo chuẩn | Phân tích khám phá, biểu đồ thống kê chuẩn |
Trong thực tế, bạn dùng cả hai cùng nhau. Seaborn tạo biểu đồ, sau đó bạn gọi các hàm Matplotlib để tinh chỉnh nhãn, giới hạn, hoặc ghi chú—như bạn sẽ thấy trong các ví dụ bên dưới.
Bạn có thể khám phá Matplotlib chi tiết hơn với hướng dẫn Giới thiệu Vẽ biểu đồ với Matplotlib trong Python của chúng tôi.
Cài đặt Seaborn
Seaborn yêu cầu Python 3.9+ (từ phiên bản 0.13) và phụ thuộc vào Matplotlib, pandas và NumPy. Cài đặt bằng pip hoặc conda:
# install seaborn with pip
pip install seaborn
Khi bạn dùng pip, Seaborn và các phụ thuộc bắt buộc của nó sẽ được cài đặt. Nếu muốn truy cập các tính năng bổ sung không bắt buộc, bạn cũng có thể bao gồm phụ thuộc tùy chọn trong lệnh pip install. Ví dụ:
pip install seaborn[stats]
Hoặc với conda:
# install seaborn with conda
conda install seaborn
Tập dữ liệu mẫu
Seaborn cung cấp một số tập dữ liệu tích hợp để chúng ta dùng cho trực quan hóa dữ liệu và phân tích thống kê. Các tập dữ liệu này được lưu trong pandas DataFrame, giúp chúng dễ sử dụng với các hàm vẽ của Seaborn.
Một trong những tập dữ liệu phổ biến nhất, cũng được dùng trong tất cả ví dụ chính thức của Seaborn, là `tips dataset`; nó chứa thông tin về tiền tip tại nhà hàng. Đây là ví dụ tải và trực quan hóa tập dữ liệu Tips trong Seaborn:
import seaborn as sns
tips = sns.load_dataset("tips")
sns.histplot(data=tips, x="total_bill")
Kết quả:

Nếu bạn chưa hiểu biểu đồ này—đừng lo. Đây gọi là histogram. Chúng tôi sẽ giải thích chi tiết hơn về histogram ở phần sau của hướng dẫn. Trước mắt, điều cần nhớ là Seaborn đi kèm nhiều tập dữ liệu mẫu dạng pandas DataFrame rất dễ dùng để luyện tập kỹ năng trực quan hóa của bạn. Đây là một ví dụ khác khi tải tập dữ liệu `exercise`.
import seaborn as sns
# Load the exercise dataset
exercise = sns.load_dataset("exercise")
# check the head
exercise.head()
Kết quả:
Các loại biểu đồ trong Seaborn
Seaborn cung cấp nhiều loại biểu đồ cho các nhu cầu phân tích khác nhau. Bất kỳ trực quan hóa nào nhìn chung rơi vào một trong ba nhóm:
- Đơn biến (Univariate) – chỉ x (chỉ chứa một trục thông tin)
- Nhị biến (Bivariate) – x và y (chứa hai trục thông tin)
- Ba biến (Trivariate) – x, y, z (chứa ba trục thông tin)

Dưới đây là một số loại biểu đồ được dùng phổ biến trong Seaborn:
- Biểu đồ phân tán (Scatter Plot). Dùng để trực quan hóa mối quan hệ giữa hai biến. Hàm scatterplot() của Seaborn cung cấp cách đơn giản để tạo biểu đồ phân tán.
- Biểu đồ đường (Line Plot). Dùng để trực quan hóa xu hướng của một biến theo thời gian. Hàm lineplot() của Seaborn cung cấp cách đơn giản để tạo biểu đồ đường.
- Histogram. Dùng để trực quan hóa phân phối của một biến. Hàm histplot() của Seaborn cung cấp cách đơn giản để tạo histogram.
- Biểu đồ hộp (Box Plot). Dùng để trực quan hóa phân phối của một biến. Hàm boxplot() của Seaborn cung cấp cách đơn giản để tạo biểu đồ hộp.
- Biểu đồ violin (Violin Plot). Tương tự box plot nhưng cho cái nhìn chi tiết hơn về phân phối dữ liệu. Hàm violinplot() của Seaborn cung cấp cách đơn giản để tạo biểu đồ violin.
- Heatmap. Dùng để trực quan hóa tương quan giữa các biến. Hàm heatmap() của Seaborn cung cấp cách đơn giản để tạo heatmap.
- Pairplot. Dùng để trực quan hóa mối quan hệ giữa nhiều biến. Hàm pairplot() của Seaborn cung cấp cách đơn giản để tạo pairplot.
Chúng ta sẽ xem ví dụ và giải thích chi tiết cho từng loại ở phần tiếp theo của hướng dẫn.
Hàm cấp Figure vs. cấp Axes
Một trong những khái niệm quan trọng nhất trong Seaborn là phân biệt giữa hàm cấp figure và cấp axes. Hiểu điều này sẽ giúp bạn tiết kiệm thời gian gỡ lỗi.
Các hàm cấp axes (như scatterplot(), histplot(), boxplot()) vẽ lên một axes của Matplotlib. Bạn có thể truyền đối số ax để kiểm soát vị trí biểu đồ:
import seaborn as sns
import matplotlib.pyplot as plt
fig, axes = plt.subplots(1, 2, figsize=(12, 5))
tips = sns.load_dataset("tips")
sns.histplot(data=tips, x="total_bill", ax=axes[0])
sns.boxplot(data=tips, x="day", y="total_bill", ax=axes[1])
plt.tight_layout()
plt.show()
Các hàm cấp figure (relplot(), displot(), catplot()) tự tạo figure riêng và có thể tự động chia dữ liệu thành nhiều panel bằng các tham số col và row:
import seaborn as sns
tips = sns.load_dataset("tips")
sns.displot(data=tips, x="total_bill", col="time", kde=True)
Các hàm cấp figure trả về một đối tượng FacetGrid thay vì axes, nên bạn đặt tiêu đề và nhãn theo cách khác: dùng g.set_axis_labels() và g.set_titles() thay cho plt.xlabel().
Cách tạo biểu đồ trong Seaborn
Hãy xem Seaborn hoạt động qua một vài ví dụ về các loại biểu đồ khác nhau.
Tạo biểu đồ phân tán với Seaborn
Biểu đồ phân tán dùng để trực quan hóa mối quan hệ giữa hai biến liên tục. Mỗi điểm trên biểu đồ đại diện cho một điểm dữ liệu, và vị trí của điểm trên trục x và y biểu diễn giá trị của hai biến.
Biểu đồ có thể được tùy chỉnh với màu sắc và marker khác nhau để phân biệt các nhóm điểm dữ liệu. Trong Seaborn, biểu đồ phân tán có thể tạo bằng hàm scatterplot().
import seaborn as sns
tips = sns.load_dataset("tips")
sns.scatterplot(x="total_bill", y="tip", data=tips)
Kết quả:

Biểu đồ đơn giản này có thể cải thiện bằng cách tùy chỉnh các tham số `hue` và `size`. Cách làm như sau:
import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset("tips")
# customize the scatter plot
sns.scatterplot(x="total_bill", y="tip", hue="sex", size="size", sizes=(50, 200), data=tips)
# add labels and title
plt.xlabel("Total Bill")
plt.ylabel("Tip")
plt.title("Relationship between Total Bill and Tip")
# display the plot
plt.show()
Kết quả:

Tạo biểu đồ đường với Seaborn
Biểu đồ đường dùng để trực quan hóa xu hướng trong dữ liệu theo thời gian hoặc biến liên tục khác. Trong biểu đồ đường, mỗi điểm dữ liệu được nối bằng một đường tạo thành đường cong mượt. Trong Seaborn, biểu đồ đường có thể tạo bằng hàm lineplot(). Bạn có thể tìm hiểu sâu hơn trong hướng dẫn biểu đồ đường Seaborn của chúng tôi.
import seaborn as sns
fmri = sns.load_dataset("fmri")
sns.lineplot(x="timepoint", y="signal", data=fmri)
Kết quả:

Chúng ta có thể rất dễ dàng tùy chỉnh bằng cách dùng các cột `event` và `region` từ tập dữ liệu.
import seaborn as sns
import matplotlib.pyplot as plt
fmri = sns.load_dataset("fmri")
# customize the line plot
sns.lineplot(x="timepoint", y="signal", hue="event", style="region", markers=True, dashes=False, data=fmri)
# add labels and title
plt.xlabel("Timepoint")
plt.ylabel("Signal Intensity")
plt.title("Changes in Signal Intensity over Time")
# display the plot
plt.show()
Kết quả:

Một lần nữa, tôi dùng Seaborn để tạo biểu đồ đường cơ bản và Matplotlib để thêm nhãn trục và tiêu đề.
Tạo biểu đồ cột với Seaborn
Biểu đồ cột dùng để trực quan hóa mối quan hệ giữa một biến phân loại và một biến liên tục. Trong biểu đồ cột, mỗi cột biểu diễn giá trị trung bình hoặc trung vị (hoặc bất kỳ phép tổng hợp nào) của biến liên tục theo từng hạng mục. Trong Seaborn, biểu đồ cột có thể tạo bằng hàm barplot(). Xem chi tiết hơn trong hướng dẫn seaborn barplot của chúng tôi.
import seaborn as sns
titanic = sns.load_dataset("titanic")
sns.barplot(x="class", y="fare", data=titanic)
Kết quả:

Hãy tùy chỉnh biểu đồ này bằng cách thêm cột `sex` từ tập dữ liệu.
import seaborn as sns
import matplotlib.pyplot as plt
titanic = sns.load_dataset("titanic")
# customize the bar plot
sns.barplot(x="class", y="fare", hue="sex", errorbar=None, palette="muted", data=titanic)
# add labels and title
plt.xlabel("Class")
plt.ylabel("Fare")
plt.title("Average Fare by Class and Gender on the Titanic")
# display the plot
plt.show()
Kết quả:

Tạo histogram với Seaborn
Histogram trực quan hóa phân phối của một biến liên tục. Trong histogram, dữ liệu được chia thành các bins và chiều cao của mỗi bin biểu diễn tần suất hoặc số lượng điểm dữ liệu trong bin đó. Trong Seaborn, histogram có thể tạo bằng hàm histplot(). Hướng dẫn histogram Seaborn của chúng tôi trình bày chi tiết hơn.
import seaborn as sns
iris = sns.load_dataset("iris")
sns.histplot(x="petal_length", data=iris)
Kết quả:

Tùy chỉnh histogram
import seaborn as sns
import matplotlib.pyplot as plt
iris = sns.load_dataset("iris")
# customize the histogram
sns.histplot(data=iris, x="petal_length", bins=20, kde=True, color="green")
# add labels and title
plt.xlabel("Petal Length (cm)")
plt.ylabel("Frequency")
plt.title("Distribution of Petal Lengths in Iris Flowers")
# display the plot
plt.show()
Kết quả:

Tạo biểu đồ mật độ với Seaborn
Biểu đồ mật độ (còn gọi là ước lượng mật độ kernel hay KDE) hiển thị phân phối của biến liên tục dưới dạng đường cong mượt thay vì các bin rời rạc. Chúng hữu ích khi bạn muốn so sánh phân phối mà không bị nhạy với kích thước bin như histogram. Trong Seaborn, tạo chúng với kdeplot().
import seaborn as sns
tips = sns.load_dataset("tips")
sns.kdeplot(data=tips, x="total_bill")
Kết quả:

Hãy cải thiện biểu đồ bằng cách tùy chỉnh nó.
import seaborn as sns
import matplotlib.pyplot as plt
# Load the "tips" dataset from Seaborn
tips = sns.load_dataset("tips")
# Create a density plot of the "total_bill" column from the "tips" dataset
# We use the "hue" parameter to differentiate between "lunch" and "dinner" meal times
# We use the "fill" parameter to fill the area under the curve
# We adjust the "alpha" and "linewidth" parameters to make the plot more visually appealing
sns.kdeplot(data=tips, x="total_bill", hue="time", fill=True, alpha=0.6, linewidth=1.5)
# Add a title and labels to the plot using Matplotlib
plt.title("Density Plot of Total Bill by Meal Time")
plt.xlabel("Total Bill ($)")
plt.ylabel("Density")
# Show the plot
plt.show()
Kết quả:

Tạo biểu đồ hộp với Seaborn
Biểu đồ hộp là dạng trực quan hóa thể hiện phân phối của một tập dữ liệu. Chúng thường được dùng để so sánh phân phối của một hoặc nhiều biến theo các nhóm khác nhau.
import seaborn as sns
tips = sns.load_dataset("tips")
sns.boxplot(x="day", y="total_bill", data=tips)
Kết quả:

Tùy chỉnh biểu đồ hộp bằng cách thêm cột `time` từ tập dữ liệu.
import seaborn as sns
import matplotlib.pyplot as plt
# load the tips dataset from Seaborn
tips = sns.load_dataset("tips")
# create a box plot of total bill by day and meal time, using the "hue" parameter to differentiate between lunch and dinner
# customize the color scheme using the "palette" parameter
# adjust the linewidth and fliersize parameters to make the plot more visually appealing
sns.boxplot(x="day", y="total_bill", hue="time", data=tips, palette="Set3", linewidth=1.5, fliersize=4)
# add a title, xlabel, and ylabel to the plot using Matplotlib functions
plt.title("Box Plot of Total Bill by Day and Meal Time")
plt.xlabel("Day of the Week")
plt.ylabel("Total Bill ($)")
# display the plot
plt.show()
Tạo biểu đồ violin với Seaborn
Biểu đồ violin là dạng trực quan hóa kết hợp đặc điểm của cả box plot và biểu đồ mật độ. Nó hiển thị ước lượng mật độ của dữ liệu, thường được làm mượt bằng bộ ước lượng mật độ kernel, cùng với khoảng tứ phân vị (IQR) và trung vị dưới dạng giống box plot.
Bề rộng của violin đại diện cho ước lượng mật độ, phần rộng hơn biểu thị mật độ cao hơn, và IQR cùng trung vị được hiển thị bằng chấm và đường màu trắng bên trong violin.
import seaborn as sns
import matplotlib.pyplot as plt
iris = sns.load_dataset("iris")
sns.violinplot(x="species", y="petal_length", data=iris)
plt.show()
Kết quả:

Tạo heatmap với Seaborn
Heatmap dùng màu sắc để biểu diễn giá trị trong một ma trận. Trong phân tích dữ liệu, heatmap thường dùng để trực quan hóa ma trận tương quan. Hướng dẫn heatmap Seaborn của chúng tôi trình bày các tùy chỉnh nâng cao.
import seaborn as sns
import matplotlib.pyplot as plt
# Load the dataset
tips = sns.load_dataset('tips')
# Create a heatmap of the correlation between variables
corr = tips.select_dtypes(include="number").corr()
sns.heatmap(corr, annot=True, cmap="coolwarm")
# Show the plot
plt.show()
Kết quả:

Một ví dụ khác về heatmap dùng tập dữ liệu `flights`.
import seaborn as sns
import matplotlib.pyplot as plt
# Load the dataset
flights = sns.load_dataset('flights')
# Pivot the data
flights = flights.pivot(index="month", columns="year", values="passengers")
# Create a heatmap
sns.heatmap(flights, cmap='Blues', annot=True, fmt='d')
# Set the title and axis labels
plt.title('Passengers per month')
plt.xlabel('Year')
plt.ylabel('Month')
# Show the plot
plt.show()
Kết quả:

Trong ví dụ này, chúng ta dùng tập dữ liệu `flights` từ thư viện `seaborn`. Ta xoay dữ liệu để phù hợp với biểu diễn heatmap bằng phương thức .pivot(). Sau đó, tạo heatmap bằng hàm sns.heatmap() và truyền biến flights đã xoay làm đối số.
Tạo pair plot với Seaborn
Pair plot là dạng trực quan hóa trong đó nhiều biểu đồ phân tán theo cặp được hiển thị trong một ma trận. Mỗi biểu đồ phân tán thể hiện mối quan hệ giữa hai biến, trong khi các biểu đồ trên đường chéo cho thấy phân phối của từng biến.
import seaborn as sns
# Load iris dataset
iris = sns.load_dataset("iris")
# Create pair plot
sns.pairplot(data=iris)
# Show plot
plt.show()
Kết quả:

Chúng ta có thể tùy chỉnh biểu đồ này bằng cách dùng tham số `hue` và `diag_kind`.
import seaborn as sns
import matplotlib.pyplot as plt
# Load iris dataset
iris = sns.load_dataset("iris")
# Create pair plot with custom settings
sns.pairplot(data=iris, hue="species", diag_kind="kde", palette="husl")
# Set title
plt.title("Iris Dataset Pair Plot")
# Show plot
plt.show()
Kết quả:

Tạo joint plot với Seaborn
Joint plot kết hợp một biểu đồ phân tán (trung tâm) với các histogram biên (trên và cạnh phải) trong một hình duy nhất. Bố cục này cho thấy cả mối quan hệ giữa hai biến và phân phối riêng lẻ của chúng trong nháy mắt.
Dưới đây là ví dụ đơn giản xây dựng joint plot của seaborn dùng tập dữ liệu iris:
import seaborn as sns
import matplotlib.pyplot as plt
# load iris dataset
iris = sns.load_dataset("iris")
# plot a joint plot of sepal length and sepal width
sns.jointplot(x="sepal_length", y="sepal_width", data=iris)
# display the plot
plt.show()
Kết quả:

Tạo facet grid với Seaborn
FacetGrid tạo một lưới các subplot—mỗi subplot tương ứng với một giá trị duy nhất trong biến phân loại. Điều này cho phép bạn so sánh cùng một biểu đồ giữa các nhóm (ví dụ: phân phối hóa đơn tổng theo từng ngày trong tuần).
import seaborn as sns
# load the tips dataset
tips = sns.load_dataset('tips')
# create a FacetGrid for day vs total_bill
g = sns.FacetGrid(tips, col="day")
# plot histogram for total_bill in each day
g.map(sns.histplot, "total_bill")
Kết quả:

|
Seaborn Cheat Sheet cho Python |
Chủ đề và kiểu dáng Seaborn
Seaborn cung cấp năm chủ đề tích hợp giúp kiểm soát tổng thể diện mạo biểu đồ của bạn. Gọi sns.set_theme() ở đầu script để áp dụng toàn cục:
import seaborn as sns
sns.set_theme(style="whitegrid") # options: darkgrid, whitegrid, dark, white, ticks
Bạn cũng có thể điều chỉnh tỷ lệ các thành phần biểu đồ với tham số context. Tham số này điều chỉnh cỡ chữ, độ rộng đường và các thành phần khác cho các định dạng đầu ra khác nhau:
sns.set_theme(style="whitegrid", context="talk") # options: paper, notebook, talk, poster
Ngữ cảnh "notebook" (mặc định) phù hợp cho Jupyter notebooks, trong khi "talk" và "poster" phóng to mọi thứ cho thuyết trình.
Tùy chỉnh biểu đồ Seaborn
Vượt ra ngoài kiểu dáng mặc định, Seaborn cho phép bạn kiểm soát bảng màu, kích thước figure, chủ đề và chú thích. Dưới đây là những tùy chỉnh thường gặp:
Thay đổi bảng màu
Đây là ví dụ về cách bạn có thể thay đổi bảng màu cho biểu đồ seaborn:
import seaborn as sns
import matplotlib.pyplot as plt
# Load sample dataset
tips = sns.load_dataset("tips")
# Create a scatter plot with color palette
sns.scatterplot(x="total_bill", y="tip", hue="day", data=tips, palette="Set2")
# Customize plot
plt.title("Total Bill vs Tip")
plt.xlabel("Total Bill ($)")
plt.ylabel("Tip ($)")
plt.show()
Kết quả:

Điều chỉnh kích thước figure
Để điều chỉnh kích thước figure cho các biểu đồ seaborn của bạn, bạn có thể tham khảo ví dụ dưới đây:
import seaborn as sns
import matplotlib.pyplot as plt
# Load sample dataset
iris = sns.load_dataset("iris")
# Create a violin plot with adjusted figure size
plt.figure(figsize=(8,6))
sns.violinplot(x="species", y="petal_length", data=iris)
# Customize plot
plt.title("Petal Length Distribution by Species")
plt.xlabel("Species")
plt.ylabel("Petal Length (cm)")
plt.show()
Kết quả:

Thêm chú thích (annotation)
Chú thích có thể giúp trực quan hóa của bạn dễ đọc hơn. Dưới đây là ví dụ về cách thêm chúng:
import seaborn as sns
import matplotlib.pyplot as plt
# Load sample dataset
diamonds = sns.load_dataset("diamonds")
# Create a scatter plot with annotations
sns.scatterplot(x="carat", y="price", data=diamonds)
# Add annotations
plt.text(1, 18000, "Large, Expensive Diamonds", fontsize=12, color="red")
plt.text(2.5, 5000, "Small, Affordable Diamonds", fontsize=12, color="blue")
# Customize plot
plt.title("Diamond Prices by Carat")
plt.xlabel("Carat (ct)")
plt.ylabel("Price ($)")
plt.show()
Kết quả:

Thực hành tốt nhất cho trực quan hóa với Seaborn
Dưới đây là một vài thực hành tốt nên ghi nhớ để tận dụng tối đa Seaborn.
Chọn loại biểu đồ phù hợp với dữ liệu
Seaborn cung cấp nhiều loại biểu đồ, mỗi loại được thiết kế cho các kiểu dữ liệu và phân tích khác nhau. Việc chọn đúng loại biểu đồ cho dữ liệu rất quan trọng để truyền đạt hiệu quả phát hiện của bạn. Ví dụ, biểu đồ phân tán có thể phù hợp hơn để trực quan hóa mối quan hệ giữa hai biến liên tục, trong khi biểu đồ cột có thể phù hợp hơn cho dữ liệu phân loại.
Sử dụng màu sắc hiệu quả
Màu sắc có thể là công cụ mạnh mẽ cho trực quan hóa dữ liệu, nhưng điều quan trọng là sử dụng hiệu quả. Tránh dùng quá nhiều màu hoặc màu quá chói, vì điều này có thể khiến biểu đồ khó đọc. Thay vào đó, dùng màu để làm nổi bật thông tin quan trọng hoặc để nhóm các điểm dữ liệu tương tự.
Ghi nhãn trục và dùng tiêu đề rõ ràng
Nhãn và tiêu đề là thiết yếu cho trực quan hóa hiệu quả. Hãy đảm bảo ghi nhãn trục rõ ràng và cung cấp tiêu đề mô tả cho biểu đồ. Điều này sẽ giúp khán giả hiểu thông điệp bạn muốn truyền tải.
Cân nhắc đối tượng người xem
Khi tạo trực quan hóa, hãy cân nhắc đối tượng người xem và thông điệp bạn muốn truyền đạt. Nếu khán giả không chuyên, hãy dùng ngôn ngữ rõ ràng, súc tích, tránh biệt ngữ kỹ thuật và cung cấp giải thích rõ ràng cho các khái niệm thống kê.
Dùng phân tích thống kê phù hợp
Seaborn cung cấp nhiều hàm thống kê bạn có thể dùng để phân tích dữ liệu. Khi chọn hàm thống kê, hãy đảm bảo chọn cái phù hợp nhất với dữ liệu và câu hỏi nghiên cứu của bạn.
Tùy chỉnh trực quan hóa của bạn
Bạn sẽ tìm thấy nhiều tùy chọn tùy chỉnh trong Seaborn để nâng cao trực quan hóa. Hãy thử nghiệm với phông chữ, kiểu dáng và màu sắc khác nhau để tìm ra cách truyền đạt thông điệp tốt nhất.
Chọn thư viện trực quan hóa Python phù hợp
Dựa trên những gì đã trình bày, hãy xem Seaborn so với Matplotlib và hai lựa chọn khác mà bạn có thể gặp, và thư viện nào phù hợp cho trường hợp nào:
| Thư viện | Thế mạnh | Hạn chế | Tốt nhất cho |
|---|---|---|---|
| Matplotlib | Kiểm soát hoàn toàn mọi thành phần của figure | Dài dòng; không có thống kê tích hợp | Figure tùy biến, chất lượng xuất bản |
pandas .plot() |
Vẽ nhanh từ DataFrame không cần import thêm | Hạn chế loại biểu đồ; kiểu dáng tối thiểu | Kiểm tra khám phá nhanh |
| Plotly | Tương tác; nhúng web; hỗ trợ 3D | Phụ thuộc nặng; đường cong học tùy chỉnh | Bảng điều khiển, ứng dụng web, báo cáo tương tác |
| Seaborn | Mặc định theo thống kê; API gọn; tích hợp pandas | Chỉ tĩnh; kém linh hoạt hơn so với Matplotlib thuần | Phân tích khám phá, biểu đồ thống kê |
Với phần lớn công việc phân tích dữ liệu, tôi dùng Seaborn cho khám phá ban đầu, Matplotlib để tinh chỉnh, và Plotly khi đầu ra cần tương tác. Chúng không loại trừ lẫn nhau.
Kết luận
Seaborn là một thư viện trực quan hóa dữ liệu mạnh mẽ trong Python, cung cấp giao diện trực quan và dễ dùng để tạo các đồ họa thống kê giàu thông tin. Với bộ công cụ trực quan hóa phong phú, Seaborn giúp bạn nhanh chóng và hiệu quả khám phá cũng như truyền đạt insight từ các tập dữ liệu phức tạp.
Từ biểu đồ phân tán và biểu đồ đường đến heatmap và facet grid, Seaborn cung cấp nhiều trực quan hóa để đáp ứng các nhu cầu khác nhau. Hơn nữa, khả năng tích hợp với Pandas và Numpy khiến Seaborn trở thành công cụ không thể thiếu cho nhà phân tích và nhà khoa học dữ liệu.
Với hướng dẫn nhập môn về Python Seaborn này, bạn có thể bắt đầu khám phá thế giới trực quan hóa dữ liệu và truyền đạt insight của mình hiệu quả tới đông đảo khán giả.
Nếu bạn muốn mở rộng kiến thức thêm về chủ đề này, hãy xem các khóa Nhập môn Trực quan hóa Dữ liệu với Seaborn hoặc Trực quan hóa Dữ liệu Nâng cao với Seaborn của chúng tôi.
Xuyên suốt các khóa học này, bạn sẽ học cách tận dụng các công cụ trực quan hóa nâng cao của Seaborn để phân tích nhiều bộ dữ liệu thực tế, như Khảo sát Nhà ở Mỹ, dữ liệu học phí đại học và khách mời The Daily Show.
Bạn cũng có thể xem Seaborn cheat sheet miễn phí của chúng tôi.
Câu hỏi thường gặp về Python Seaborn
Sự khác biệt giữa Seaborn và Matplotlib là gì, và khi nào tôi nên dùng mỗi cái?
Seaborn là một thư viện cấp cao xây dựng trên Matplotlib giúp đơn giản hóa việc tạo đồ họa thống kê, trong khi Matplotlib là thư viện cấp thấp cho phép bạn kiểm soát chi tiết từng thành phần của biểu đồ. Hãy dùng Seaborn khi bạn muốn các trực quan hóa thống kê đẹp mắt với ít mã nhất, và dùng Matplotlib khi bạn cần biểu đồ tùy biến cao hoặc không theo chuẩn. Bạn cũng có thể kết hợp cả hai, vì các biểu đồ Seaborn có thể tinh chỉnh thêm bằng các lệnh Matplotlib.
Tôi có thể dùng Seaborn với các nguồn dữ liệu khác ngoài Pandas DataFrame không?
Seaborn được thiết kế để làm việc tự nhiên nhất với Pandas DataFrame, nhưng nhiều hàm của nó cũng chấp nhận mảng NumPy, danh sách Python, hoặc dictionary. Dù vậy, nên chuyển dữ liệu của bạn sang DataFrame trước vì như thế bạn có thể dùng đầy đủ tính năng của Seaborn, bao gồm các tham số hue, style và size tham chiếu theo tên cột.
Tôi xử lý giá trị thiếu như thế nào khi vẽ với Seaborn?
Seaborn thường xử lý giá trị thiếu khá ổn bằng cách loại chúng trước khi vẽ, nên các mục NaN sẽ không làm mã của bạn bị lỗi. Tuy nhiên, dữ liệu thiếu có thể âm thầm làm méo phân phối hoặc các ước lượng thống kê trong biểu đồ. Thực hành tốt nhất là kiểm tra và xử lý rõ ràng các giá trị thiếu trong DataFrame (bằng nội suy hoặc loại bỏ) trước khi trực quan hóa.
Seaborn có những chủ đề tích hợp nào và tôi thay đổi chúng ra sao?
Seaborn đi kèm năm chủ đề dựng sẵn (darkgrid, whitegrid, dark, white và ticks) bạn có thể áp dụng bằng sns.set_style(). Bạn cũng có thể điều chỉnh tỷ lệ các thành phần biểu đồ (cỡ chữ, độ dày đường) bằng sns.set_context() với các tùy chọn như paper, notebook, talk và poster, giúp bạn dễ dàng điều chỉnh cho các định dạng trình bày khác nhau.
Seaborn có phù hợp cho các trực quan hóa tương tác hoặc trên web không?
Seaborn chủ yếu được thiết kế để tạo biểu đồ tĩnh và phù hợp nhất cho phân tích khám phá, báo cáo và ấn phẩm. Nếu bạn cần tính năng tương tác như chú giải (tooltip), phóng to, hoặc phần tử có thể nhấp cho ứng dụng web, các thư viện như Plotly hoặc Bokeh là lựa chọn tốt hơn. Tuy vậy, bạn vẫn có thể dùng Seaborn trong Jupyter notebooks cho quy trình khám phá mang tính bán tương tác.


