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

Seaborn Barplot: Hướng Dẫn Toàn Diện

Học cách tạo và tùy biến barplot trong Seaborn với Python. Nắm vững các kỹ thuật thiết yếu để trực quan hóa mối quan hệ dữ liệu phân loại, từ biểu đồ cơ bản đến tính năng nâng cao.
· 10 phút đọc

Khám phá cùng AI

Trực quan hóa dữ liệu biến thông tin phức tạp thành những insight rõ ràng, có thể hành động. Barplot trong Seaborn vượt trội khi trình bày dữ liệu phân loại thông qua đồ họa thống kê tinh gọn, đẹp mắt. Thư viện kết hợp tính linh hoạt của Matplotlib với sức mạnh của pandas, rất phù hợp cho cả phân tích nhanh lẫn trực quan hóa sẵn sàng xuất bản.

Barplot của Seaborn cung cấp các tính năng thiết yếu cho phân tích dữ liệu - từ so sánh cơ bản đến biểu diễn thống kê nâng cao. Chúng xử lý tốt các tác vụ phổ biến như so sánh chỉ số bán hàng theo vùng, phân tích phản hồi khảo sát và trực quan hóa kết quả thí nghiệm. 

Cú pháp trực quan và các hàm thống kê tích hợp khiến thư viện này hữu ích cho cả người mới bắt đầu lẫn người làm dữ liệu nhiều kinh nghiệm.

Trong bài viết này, chúng ta sẽ xem qua những điều cơ bản về barplot trong Seaborn, tạo biểu đồ cơ bản với ví dụ mã, nâng cấp biểu đồ qua tùy biến, triển khai các tính năng nâng cao và khám phá các ứng dụng thực tiễn.

Để tìm hiểu thêm về trực quan hóa dữ liệu với Seaborn, hãy xem khóa học Giới thiệu Trực quan hóa Dữ liệu với Seaborn của chúng tôi.

Những điều cơ bản về Seaborn barplot

Trước khi đi vào barplot, hãy điểm qua một số nền tảng của Seaborn, lợi thế của nó cho barplot và cách thiết lập môi trường mã hóa.

Seaborn là gì?

Seaborn là thư viện trực quan hóa dữ liệu thống kê bằng Python, xây dựng trên Matplotlib. Nó chuyên tạo các đồ họa thống kê giàu thông tin và hấp dẫn với lượng mã tối thiểu. Thư viện tích hợp chặt chẽ với pandas DataFrame, giúp đặc biệt hiệu quả cho quy trình phân tích dữ liệu.

Nó cung cấp giao diện bậc cao để vẽ biểu đồ bắt mắt, đồng thời tự động xử lý nhiều chi tiết về phong cách.

Thư viện nổi trội ở ba khía cạnh chính:

  • Tích hợp liền mạch với pandas DataFrame, giúp thao tác dữ liệu trở nên đơn giản
  • Đi kèm các hàm thống kê tích hợp, không cần tính toán riêng lẻ
  • Áp dụng sẵn các chủ đề và bảng màu chuyên nghiệp theo mặc định

Ví dụ, trong khi Matplotlib cần nhiều dòng mã để tạo một trực quan hóa thống kê cơ bản, Seaborn có thể hoàn thành cùng tác vụ chỉ với một lời gọi hàm.

Riêng với barplot, Seaborn bổ sung các tính năng mạnh như tính trung bình tự động, khoảng tin cậy và xử lý biến phân loại nâng cao - những khả năng mà nếu dùng Matplotlib thuần sẽ cần nhiều mã bổ sung đáng kể.

Vì sao dùng barplot?

Barplot trình bày dữ liệu phân loại bằng các cột dọc hoặc ngang, với độ dài biểu thị giá trị số. Điều này khiến chúng lý tưởng để so sánh giá trị giữa các nhóm hoặc hạng mục khác nhau. Trong phân tích dữ liệu, barplot giúp trực quan hóa kết quả khảo sát, thị phần, chỉ số hiệu suất và phân bố doanh số.

Các ưu điểm chính gồm:

  • So sánh rõ ràng lượng giữa các hạng mục
  • Tính năng thống kê tích hợp (trung bình, trung vị, khoảng tin cậy)
  • Biểu diễn hiệu quả dữ liệu theo nhóm
  • Thành phần trực quan đơn giản nhưng giàu thông tin
  • Tùy biến dễ dàng cho các bài thuyết trình chuyên nghiệp

Thiết lập nhanh

Để bắt đầu tạo barplot với Seaborn, chúng ta cần thiết lập môi trường Python. Cách bắt đầu như sau:

Đầu tiên, hãy cài đặt các gói cần thiết như bên dưới:

pip install seaborn pandas numpy

Giờ đây chúng ta đã sẵn sàng bộ công cụ trực quan hóa. Hãy import các thư viện cần dùng như sau:

# For creating statistical visualizations
import seaborn as sns

# For data manipulation and analysis
import pandas as pd

# For numerical operations
import numpy as np

Chúng ta có thể làm biểu đồ trông đẹp hơn với một số thiết lập phong cách như sau:

# Clean white style
sns.set_style("white")

Kiểu white loại bỏ đường lưới và sẽ giúp biểu đồ hiển thị đẹp trên hầu hết màn hình. Ở các phần tiếp theo, chúng ta sẽ xem cách tạo barplot và nâng cấp chúng.

Tạo Seaborn Barplot Cơ Bản

Barplot rất phù hợp để trực quan hóa mối quan hệ giữa biến phân loại và biến số. Nó hiển thị ước lượng điểm (như trung bình hoặc trung vị) và độ bất định xung quanh các ước lượng đó qua thanh sai số. Hãy xem cú pháp cơ bản của seaborn barplot.

Cú pháp và tham số

Hàm sns.barplot() trong Seaborn cung cấp cách trực tiếp để tạo barplot thống kê. Cấu trúc cơ bản của hàm .barplot() như dưới đây:

sns.barplot(
    data=None,      # Your DataFrame
    x=None,         # Category variable
    y=None,         # Numeric variable
    estimator='mean',  # Statistical function to estimate
    errorbar=('ci', 95),  # Error bars type and level
    orient=None     # "v" for vertical, "h" for horizontal
)

Các tham số này cho chúng ta quyền kiểm soát dữ liệu hiển thị và cách hiển thị. Tham số data nhận DataFrame của bạn, trong khi x và y chỉ định cột dùng cho hạng mục và giá trị. estimator cho phép chọn hàm thống kê áp dụng (mặc định là trung bình), và errorbar kiểm soát cách hiển thị độ bất định. Bạn cũng có thể chuyển giữa hướng dọc và ngang bằng tham số orient.

Giờ hãy xem cách tạo barplot hiệu quả bằng dataset tips tích hợp của Seaborn, chứa thông tin về hóa đơn và tiền tip ở nhà hàng.

Ví dụ: Trực quan hóa một tập dữ liệu đơn giản

Chúng ta sẽ xem hành vi tip theo các ngày trong tuần bằng dataset tips. Dataset này chứa thông tin về hóa đơn nhà hàng, bao gồm ngày trong tuần, tổng hóa đơn, tiền tip và các biến khác.

# Import required libraries and load dataset
import seaborn as sns
tips = sns.load_dataset("tips")

# Create a basic barplot showing average tips by day
sns.barplot(data=tips, x="day", y="tip")

Output:

Đoạn mã đã tạo trực quan hóa ở trên, trong đó mỗi cột biểu diễn tiền tip trung bình cho một ngày trong tuần. Chiều cao mỗi cột thể hiện giá trị tip trung bình, còn các đường đen (thanh sai số) cho biết khoảng tin cậy 95% - giúp ta hiểu cả mức tip điển hình lẫn mức biến thiên.

Chúng ta cũng có thể xem mẫu tip theo các thời điểm bữa ăn khác nhau:

# Create a barplot showing average tips by time of day
sns.barplot(data=tips, x="time", y="tip")

Output:

Biểu đồ này cho thấy sự khác biệt hành vi tip giữa bữa trưa và bữa tối. Chiều cao mỗi cột biểu diễn tiền tip trung bình cho thời điểm đó trong ngày, với thanh sai số cho thấy độ biến thiên hành vi tip. Dạng trực quan này giúp dễ dàng nhận ra mẫu và so sánh nhóm trong nháy mắt.

Những barplot cơ bản này tạo nền tảng cho các trực quan hóa phức tạp hơn. Ở phần tiếp theo, chúng ta sẽ xem cách nâng cấp các biểu đồ với màu sắc, nhóm và các tùy biến khác để tạo trực quan hóa nhiều thông tin và thu hút hơn.

Nâng Cấp Barplot với Tùy Biến

Thêm yếu tố trực quan vào barplot có thể giúp dữ liệu hấp dẫn hơn và dễ hiểu hơn. Hãy xem các cách khác nhau để tùy biến barplot sử dụng dataset tips.

Thêm màu cho barplot

Seaborn cung cấp nhiều cách để thêm màu vào barplot, giúp chúng trực quan hơn và giàu thông tin hơn. Chúng ta có thể dùng một màu cho tất cả cột hoặc tạo nhóm mã màu,

Tham số color đặt một màu duy nhất cho tất cả cột, trong khi palette cho phép bạn chỉ định bảng màu khi dữ liệu có nhiều nhóm. Seaborn có sẵn nhiều bảng màu phù hợp với các loại dữ liệu khác nhau.

Chúng ta có thể tạo barplot đơn giản với một màu bằng tham số color như sau:

# Load the tips dataset if you haven't already
import seaborn as sns
tips = sns.load_dataset("tips")

# Single color barplot
sns.barplot(data=tips, x="day", y="tip", color="skyblue")

Output:

Chúng ta có thể tạo barplot với nhiều màu bằng tham số palette như sau:

# Load the tips dataset if you haven't already
import seaborn as sns
tips = sns.load_dataset("tips")

# Using a different color palette
sns.barplot(data=tips, x="day", y="tip", palette="Set2")

Output:

Seaborn barplot với nhiều cột

Một trong những tính năng mạnh nhất của barplot Seaborn là khả năng hiển thị mối quan hệ giữa nhiều biến bằng tham số hue. Điều này tạo các cột theo nhóm giúp so sánh dễ dàng hơn.

Hãy so sánh tiền tip theo cả ngày và thời điểm bữa ăn dùng tham số hue như dưới đây:

# Load the tips dataset if you haven't already
import seaborn as sns
tips = sns.load_dataset("tips")

# Create a grouped barplot showing tips by day and time
sns.barplot(
    data=tips,
    x="day",
    y="tip",
    hue="time"
)

Output:

Biểu đồ trên hiển thị hai cột - một cho bữa trưa và một cho bữa tối. Việc nhóm này giúp ta thấy không chỉ tiền tip thay đổi theo ngày mà còn khác biệt giữa các thời điểm bữa ăn.

Tạo seaborn stacked barplot

Barplot xếp chồng (stacked) rất tốt để thể hiện thành phần của các hạng mục khác nhau. Dù Seaborn không có hàm stacked barplot trực tiếp, ta có thể kết hợp với matplotlib để tạo trực quan hóa xếp chồng hiệu quả. 

Cách tiếp cận này tận dụng chức năng thống kê của Seaborn đồng thời dùng khả năng xếp chồng của matplotlib. Ví dụ, trong dataset tips, hãy xem tiền tip được phân bổ giữa người hút thuốc và không hút thuốc theo các ngày như thế nào.

Bắt đầu bằng cách import các thư viện cần thiết cho trực quan hóa:

# Import required libraries
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np

Giờ chúng ta sẽ nạp dataset chứa thông tin tiền tip nhà hàng:

# Load the tips dataset
tips = sns.load_dataset("tips")

Chúng ta sẽ tạo một figure với kích thước phù hợp cho trực quan hóa:

# Create figure and axis
plt.figure(figsize=(10, 4))

Tiếp theo, chúng ta sẽ tính tiền tip trung bình cho người hút thuốc và không hút thuốc theo các ngày:

# Calculate values for stacking
# Filter smokers, group by day and get mean tips
smoker_means = tips[tips['smoker']=='Yes'].groupby('day')['tip'].mean()
 
# Filter non-smokers, group by day and get mean tips     
non_smoker_means = tips[tips['smoker']=='No'].groupby('day')['tip'].mean()

Tiếp theo, chúng ta sẽ thiết lập các tham số cơ bản cho các cột xếp chồng như sau:

# Plot the stacked bars using matplotlib
days = smoker_means.index
width = 0.8

Giờ, chúng ta sẽ tạo lớp dưới của các cột xếp chồng cho nhóm không hút thuốc:

# Create bottom bars (non-smokers)
plt.bar(days, non_smoker_means, width, label='Non-smoker', color=sns.color_palette()[0])

Chúng ta sẽ thêm lớp trên cho tiền tip của người hút thuốc:

# Create top bars (smokers)
plt.bar(days, smoker_means, width, bottom=non_smoker_means, 
        label='Smoker', color=sns.color_palette()[1])

Hãy đặt phong cách sạch sẽ không đường lưới bằng styling của seaborn:

# Add Seaborn styling
sns.set_style("white")

Cuối cùng, chúng ta sẽ hiển thị stacked barplot đã hoàn thành:

# Show the plot
plt.show()

Output:

Biểu đồ thu được cho thấy tiền tip trung bình của người hút thuốc được xếp chồng lên trên tiền tip của người không hút thuốc cho mỗi ngày, giúp dễ so sánh cả tổng tiền tip và đóng góp của từng nhóm.

Giải pháp này cho phép chúng ta:

  • Giữ phong cách trực quan hấp dẫn của Seaborn
  • Xếp chồng các cột để thể hiện thành phần
  • Duy trì tính chất thống kê của trực quan hóa
  • Sử dụng bảng màu của Seaborn để đồng nhất

Tính Năng Nâng Cao và Mẹo

Sau khi đã bao quát phần cơ bản và tùy biến, hãy xem một số tính năng nâng cao giúp barplot nhiều thông tin và chuyên nghiệp hơn. Chúng ta sẽ tiếp tục dùng dataset tips để minh họa các kỹ thuật này.

Chú thích trên barplot

Thêm nhãn giá trị lên cột có thể giúp trực quan hóa chính xác và nhiều thông tin hơn. Hãy tạo barplot hiển thị giá trị tip chính xác phía trên mỗi cột.

Trước hết, hãy import thư viện và chuẩn bị dữ liệu:

# Import required libraries
import seaborn as sns
import matplotlib.pyplot as plt

# Load and prepare the tips dataset
tips = sns.load_dataset("tips")

Tạo barplot với giá trị thống kê:

# Create the basic barplot
ax = sns.barplot(data=tips, x="day", y="tip”, errorbar=None)    # Create barplot and store the axes object for annotations

Tiếp theo, chúng ta sẽ thêm nhãn giá trị lên đỉnh mỗi cột như sau:

# Get the height of each bar
bars = ax.containers[0]                           # Get the bar container object
heights = [bar.get_height() for bar in bars]      # Extract height of each bar

# Add text annotations on top of each bar
for bar, height in zip(bars, heights):            # Loop through bars and heights together
    ax.text(
        bar.get_x() + bar.get_width()/2.,        # X position (center of bar)
        height,                                   # Y position (top of bar)
        f'${height:.2f}',                        # Text (format as currency)
        ha='center',                             # Horizontal alignment
        va='bottom'                              # Vertical alignment
    )

Output:

Quản lý trục và thang đo

Khi tạo barplot, điều chỉnh trục giúp dữ liệu dễ đọc và hiệu quả hơn. Hãy xem cách tùy biến giới hạn trục, nhãn và vạch chia bằng các hàm của Seaborn.

Trước tiên, chúng ta sẽ import thư viện và nạp dataset cần cho trực quan hóa:

# Import required libraries
import seaborn as sns

# Load and prepare the tips dataset
tips = sns.load_dataset("tips")

Chúng ta có thể tạo barplot với nhãn trục và thứ tự ngày tùy chỉnh. Tham số order cho phép chỉ định chính xác cách sắp xếp ngày trên trục x:

# Create barplot with axis labels
ax = sns.barplot(
    data=tips,
    x="day",
    y="tip",
    order=['Thur', 'Sat', ‘Fri', 'Sun']     # Set custom order for days
)

Để biểu đồ nhiều thông tin hơn, ta có thể thêm nhãn mô tả cho cả hai trục bằng phương thức set:

# Set descriptive axis labels
ax.set(
    xlabel='Day of Week',
    ylabel='Average Tip ($)'
)

Để tinh chỉnh trực quan hóa, ta có thể đặt giới hạn và vạch chia cụ thể. Tham số ylim kiểm soát phạm vi trục y, trong khi xticks và yticks cho phép xác định chính xác vị trí vạch chia mong muốn:

# Customize axis limits and ticks
ax.set(
    ylim=(0, 5),                            # Set y-axis range from 0 to 5
    xticks=range(4),                        # Set x-axis tick positions
    yticks=[0, 1, 2, 3, 4, 5]              # Set specific y-axis tick values
)

Để áp dụng tất cả thay đổi vào biểu đồ, chúng ta cần chạy cùng lúc chứ không riêng lẻ. Toàn bộ mã như dưới đây:

# Import required libraries
import seaborn as sns

# Load and prepare the tips dataset
tips = sns.load_dataset("tips")

# Create barplot with axis labels
ax = sns.barplot(
   data=tips,
   x="day",
   y="tip",
   order=['Thur', 'Sat', 'Fri', 'Sun']     # Set custom order for days
)

# Set descriptive axis labels
ax.set(
   xlabel='Day of Week',
   ylabel='Average Tip ($)'
)

# Customize axis limits and ticks
ax.set(
   ylim=(0, 5),                            # Set y-axis range from 0 to 5
   xticks=range(4),                        # Set x-axis tick positions
   yticks=[0, 1, 2, 3, 4, 5]              # Set specific y-axis tick values
)

Output:

Biểu đồ kết quả hiển thị tiền tip theo ngày với nhãn rõ ràng, thang đo phù hợp và vạch chia được sắp xếp hợp lý, giúp dễ đọc và diễn giải dữ liệu.

Thêm thanh sai số

Thanh sai số giúp trực quan hóa độ bất định hoặc biến thiên trong dữ liệu. Seaborn cung cấp nhiều lựa chọn thêm thanh sai số vào barplot, bao gồm khoảng tin cậy và độ lệch chuẩn.

Trước hết, chúng ta sẽ import thư viện và nạp dataset cần cho trực quan hóa:

# Import required libraries
import seaborn as sns

# Load and prepare the tips dataset
tips = sns.load_dataset("tips")

Theo mặc định, Seaborn hiển thị khoảng tin cậy 95%. Ta có thể thay đổi bằng tham số 'errorbar' để hiển thị các ước lượng thống kê khác:

# Create barplot with confidence intervals
ax = sns.barplot(
    data=tips,
    x="day",
    y="tip",
    errorbar="ci",                          # Show confidence interval
    capsize=0.1                            # Add small caps to error bars
)

Output:

Chúng ta cũng có thể hiển thị độ lệch chuẩn thay vì khoảng tin cậy, giúp trực quan hóa độ phân tán dữ liệu:

# Switch to standard deviation
ax = sns.barplot(
    data=tips,
    x="day",
    y="tip",
    errorbar="sd",                          # Show standard deviation
    capsize=0.1                            # Add small caps to error bars
)

Output:

Đôi khi, chúng ta có thể muốn loại bỏ hoàn toàn thanh sai số để có giao diện sạch hơn:

# Create barplot without error bars
ax = sns.barplot(
    data=tips,
    x="day",
    y="tip",
    errorbar=None                           # Remove error bars
)

Output:

Các biểu đồ thu được cho thấy cách các loại thanh sai số khác nhau giúp chúng ta hiểu mức biến thiên của dữ liệu tip theo các ngày trong tuần.

Ứng Dụng Thực Tiễn của Seaborn Barplot

Barplot là công cụ linh hoạt trong trực quan hóa dữ liệu, đặc biệt hữu ích khi cần so sánh giá trị giữa các hạng mục khác nhau hoặc phân tích đồng thời nhiều biến. Hãy xem hai ứng dụng phổ biến nơi Seaborn barplot vượt trội.

Trực quan hóa xu hướng dữ liệu phân loại

Barplot trong Seaborn rất hiệu quả trong việc hé lộ mẫu của dữ liệu phân loại, đặc biệt khi phân tích chỉ số theo các nhóm khác nhau. Bằng cách hiển thị cả xu hướng trung tâm và độ bất định, barplot giúp xác định khác biệt đáng kể giữa các hạng mục. 

Điều này khiến chúng lý tưởng để phân tích hành vi khách hàng, hiệu suất sản phẩm hoặc phản hồi khảo sát khi cần so sánh giá trị giữa các nhóm riêng biệt.

So sánh nhiều biến

Khi phân tích liên quan đến nhiều yếu tố, barplot của Seaborn có thể làm nổi bật những mối quan hệ phức tạp trong dữ liệu. Sử dụng các tính năng như nhóm (hue) hoặc xếp chồng giúp so sánh đồng thời các biến khác nhau, khiến việc phát hiện mẫu và tương tác giữa các khía cạnh dữ liệu trở nên dễ dàng hơn.

Kết luận 

Barplot trong Seaborn cân bằng hợp lý giữa sự đơn giản và insight thống kê. Cú pháp trực quan của thư viện kết hợp với các tính năng thống kê vững chắc khiến nó trở thành công cụ thiết yếu cho trực quan hóa dữ liệu. Từ so sánh hạng mục cơ bản đến trực quan hóa nhóm nâng cao, barplot giúp khám phá và truyền đạt mẫu dữ liệu hiệu quả.

Sẵn sàng nâng tầm kỹ năng trực quan hóa dữ liệu? Hãy khám phá tiếp những nội dung sau:

Muốn nâng tầm kỹ năng Seaborn? Hãy đăng ký Intermediate Data Visualization with Seaborn course.

Seaborn Barplot FAQs

Seaborn barplot dùng để làm gì?

Seaborn barplot trực quan hóa mối quan hệ giữa biến phân loại và biến số bằng cách hiển thị các ước lượng thống kê kèm thanh sai số.

Tôi có thể thay đổi màu của Seaborn barplot không?

Có, bạn có thể tùy chỉnh màu bằng color cho một màu đơn hoặc palette cho nhiều bảng màu.

Tôi có thể tạo barplot theo nhóm trong Seaborn không?

Có, hãy dùng tham số hue để tạo các cột theo nhóm dựa trên một biến phân loại.

Làm sao để thêm thanh sai số vào Seaborn barplot?

Dùng tham số errorbar, ví dụ, errorbar='ci' cho khoảng tin cậy hoặc errorbar='sd' cho độ lệch chuẩn.

Seaborn có thể tạo barplot ngang không?

Có, đặt orient='h' trong hàm barplot để tạo cột ngang thay vì dọc.

Tác giả

Rajesh Kumar

Tôi là một biên tập viên nội dung về khoa học dữ liệu. Tôi yêu thích sáng tạo nội dung xoay quanh các chủ đề AI/ML/DS. Tôi cũng khám phá các công cụ AI mới và viết về chúng.

Chủ đề

Liên quan