Chuyển đến nội dung chính

Hướng dẫn Python Seaborn: Cẩm nang Trực quan hóa Dữ liệu Thống kê

Làm chủ trực quan hóa dữ liệu thống kê trong Python bằng Seaborn với các ví dụ thực hành và thực hành tốt nhất.
Đã cập nhật 5 thg 6, 2026  · 15 phút đọc

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+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, yhue

  • 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.

Biểu đồ tạo bằng thư viện Seaborn

Nguồn ảnh

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ả:

Biểu đồ tần suất Seaborn

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ả:

Dữ liệu

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)

Các loại biểu đồ Seaborn

Nguồn ảnh

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ố colrow:

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()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 đồ phân tán Seaborn

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ả:

Biểu đồ phân tán Seaborn có màu

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ả:

biểu đồ đường seaborn

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ả:

biểu đồ đường seaborn đã tùy chỉnh

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ả:

biểu đồ cột seaborn

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ả:

biểu đồ cột seaborn đã tùy chỉnh

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ả:

Seaborn histogram 2

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ả:

seaborn histogram đã tùy chỉnh

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ả:

biểu đồ mật độ seaborn

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ả:

biểu đồ mật độ seaborn đã tùy chỉnh

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ả:

biểu đồ hộp seaborn

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()

biểu đồ hộp seaborn đã tùy chỉnh

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ả:

biểu đồ violin seaborn

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ả:

seaborn heatmap

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ả:

seaborn heatmap đã tùy chỉnh

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ả:

seaborn pair plots

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ả:

seaborn pair plots đã tùy chỉnh

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ả:

seaborn join plots

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 facet grids

Seaborn Cheat Sheet cho Python
Tờ cheat sheet Seaborn cho Python này với các mẫu mã sẽ hướng dẫn bạn qua thư viện trực quan hóa dữ liệu dựa trên Matplotlib.

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""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ả:

thay đổi bảng màu

Đ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ả:

điều chỉnh kích thước figure

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êm chú thích

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, stylesize 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, whiteticks) 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, talkposter, 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.


Moez Ali's photo
Author
Moez Ali
LinkedIn
Twitter

Nhà khoa học dữ liệu, Nhà sáng lập & Người tạo ra PyCaret

Chủ đề

Học Python cùng DataCamp!

Courses

Trực quan hóa dữ liệu nâng cao với Seaborn

4 giờ
75K
Sử dụng các công cụ trực quan hóa tiên tiến của Seaborn để tạo ra các biểu đồ đẹp mắt và thông tin một cách dễ dàng.
Xem chi tiếtRight Arrow
Bắt đầu khóa học
Xem thêmRight Arrow