Tổng Quan Thư Viện Matplotlib Trong Python

Thư viện Matplotlib

Trong bài này chúng ta sẽ cùng tìm hiểu thư viện Matplotlib trong lập trình Python: Matplotlib là gì, cách cài đặt, các loại biểu đồ và cách vẽ biểu đồ đường, cột, tròn, phân tán với dữ liệu thật.

Một bảng số liệu vài trăm dòng nhìn mãi cũng khó thấy được gì, nhưng vẽ thành đồ thị thì xu hướng hiện ra ngay. Dân nhúng chắc ai cũng từng log dữ liệu cảm biến qua UART rồi muốn vẽ ra xem nhiễu thế nào đúng không nào? Matplotlib chính là công cụ để làm việc đó nhé.

Thư viện Matplotlib là gì?

Thư viện Matplotlib là thư viện vẽ đồ thị phổ biến nhất của Python, dùng để trực quan hóa dữ liệu (data visualization). Matplotlib vẽ được biểu đồ điểm, đường, cột, tròn, histogram… và rất nhiều loại khác.

Mọi thành phần của đồ thị như kích thước, màu sắc, kiểu đường, nhãn trục, tiêu đề đều tùy chỉnh được. Ngoài đồ thị tĩnh, Matplotlib còn làm được đồ thị động và đồ thị tương tác.

Lý do phải dùng thư viện Matplotlib trong Python

Matplotlib có mặt trong hầu hết các dự án Python liên quan đến dữ liệu. Một số lý do:

  • Dễ dùng: vài dòng code là có đồ thị, cú pháp khá giống MATLAB nên ai từng dùng MATLAB sẽ quen ngay.

  • Linh hoạt: tùy chỉnh được gần như mọi chi tiết của đồ thị.

  • Tích hợp tốt: làm việc trực tiếp với dữ liệu NumPy, Pandas, và nhúng được vào ứng dụng giao diện.

  • Cộng đồng lớn: gặp vấn đề gì tìm trên mạng cũng có người hỏi trước rồi.

Những tính năng chính của thư viện Matplotlib

Các tính năng chính của Matplotlib:

  1. Vẽ đồ thị: hỗ trợ rất nhiều dạng đồ thị khác nhau tùy mục đích sử dụng.
  2. Tùy chỉnh: chỉnh kích thước, màu sắc, kiểu dáng từng thành phần của biểu đồ.
  3. Lưu file: xuất biểu đồ ra nhiều định dạng như PNG, JPG, PDF, SVG.
  4. Chia sẻ: ảnh xuất ra dùng được ngay cho báo cáo, slide, website.
  5. Đa nền tảng: chạy trên Windows, Linux, macOS.

Cách cài đặt thư viện Matplotlib

Cài Matplotlib bằng pip:

  1. Mở command prompt hoặc terminal.

  2. Chạy lệnh cài đặt:

pip install matplotlib
  1. Cài xong, import vào chương trình để kiểm tra. Thường chúng ta import module con pyplot và đặt tên ngắn là plt:
import matplotlib.pyplot as plt
  1. Nếu bạn dùng môi trường ảo (virtual environment), nhớ kích hoạt môi trường trước khi chạy lệnh pip install. Với Anaconda:
conda activate <tên_môi_trường_ảo>

Còn với venv trên Linux thì chạy source <tên_môi_trường_ảo>/bin/activate, trên Windows chạy <tên_môi_trường_ảo>\Scripts\activate.

Các kiểu dữ liệu trong thư viện Matplotlib

Matplotlib hỗ trợ nhiều dạng biểu đồ, mỗi dạng phù hợp với một kiểu dữ liệu và mục đích khác nhau:

  1. Biểu đồ điểm (scatter): thể hiện mối liên hệ giữa hai hay nhiều biến.
  2. Biểu đồ đường (line): thể hiện xu hướng thay đổi theo thời gian.
  3. Biểu đồ cột (bar): so sánh giá trị giữa các nhóm.
  4. Biểu đồ tròn (pie): thể hiện tỷ lệ phần trăm của từng phần trong tổng thể.
  5. Biểu đồ phân phối (histogram): thể hiện sự phân bố của dữ liệu.
  6. Biểu đồ quan hệ (pair plot): ma trận các biểu đồ điểm, thể hiện quan hệ giữa từng cặp biến.

Ngoài ra còn có biểu đồ bong bóng, sankey và nhiều loại khác.

Các biểu đồ trên Matplotlib

Các ví dụ dưới đây dùng bộ dữ liệu hoa Iris, một bộ dữ liệu rất nổi tiếng gồm 150 bông hoa thuộc 3 loài, mỗi bông có số đo chiều dài, chiều rộng của đài hoa và cánh hoa.

Chạy đoạn code chuẩn bị dưới đây trước, các ví dụ phía sau sẽ dùng lại các biến df_iris, x, y:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# Đọc bộ dữ liệu hoa Iris
df_iris = pd.read_csv('https://vincentarelbundock.github.io/Rdatasets/csv/datasets/iris.csv')

# Độ dài cánh hoa trung bình của từng loài
df_mean = df_iris.groupby('Species')['Petal.Length'].mean()
x = df_mean.index   # tên 3 loài hoa
y = df_mean.values  # độ dài cánh hoa trung bình

Lưu ý: Nếu chạy code bằng file .py thì phải gọi plt.show() ở cuối, đồ thị mới hiện lên cửa sổ. Trên Jupyter Notebook thì đồ thị tự hiện nên nhiều tài liệu bỏ dòng này, copy về chạy bằng VS Code sẽ thấy chương trình chạy xong mà không hiện gì cả.

1. Biểu đồ đường

Biểu đồ đường nối các điểm dữ liệu bằng các đoạn thẳng, thường dùng để thể hiện xu hướng theo thời gian hoặc so sánh giữa các nhóm.

Hàm dùng để vẽ là plt.plot().

Ví dụ:

# Vẽ biểu đồ line độ dài cánh hoa trung bình giữa các loài hoa
plt.figure(figsize=(16, 8))
plt.plot(x, y, marker='o', markersize=10, linestyle='-.', linewidth=2)
plt.xlabel('Species', fontsize=16)
plt.ylabel('cm', fontsize=16)
plt.title("Average of Petal Length", fontsize=18)
plt.show()

Trong đó marker='o' vẽ chấm tròn tại mỗi điểm, linestyle='-.' là kiểu nét gạch chấm, figsize=(16, 8) là kích thước khung hình tính theo inch.

Kết quả:

Biểu đồ đường từ thư viện Matplotlib
Hình 1. Biểu đồ đường từ thư viện Matplotlib

2. Biểu đồ cột

Biểu đồ cột dùng để so sánh giá trị giữa các nhóm, vẽ bằng hàm plt.bar(). Có thể vẽ chồng nhiều loại biểu đồ lên cùng một khung, ví dụ dưới đây vẽ cả cột lẫn đường.

Ví dụ:

# Vẽ biểu đồ cột kết hợp đường độ dài cánh hoa trung bình giữa các loài hoa
plt.figure(figsize=(16, 8))
plt.bar(x, y)
plt.plot(x, y, marker='o', markersize=10, linestyle='-.', linewidth=2)
plt.xlabel('Species', fontsize=16)
plt.ylabel('cm', fontsize=16)
plt.title("Average of Petal Length", fontsize=18)
plt.show()

Kết quả:

Biểu đồ cột thể hiện độ dài cánh hoa
Hình 2. Biểu đồ cột thể hiện độ dài cánh hoa

3. Biểu đồ tròn

Muốn thể hiện tỷ lệ phần trăm của từng nhóm trong tổng thể, ví dụ thị phần, thì dùng biểu đồ tròn với hàm plt.pie().

Đầu tiên đếm số bông hoa của mỗi loài:

# Thống kê các loài hoa
x, y = np.unique(df_iris['Species'], return_counts=True)
print(x)
print(y)

Kết quả:

['setosa' 'versicolor' 'virginica']
[50 50 50]

Sau đó vẽ biểu đồ tròn:

plt.figure(figsize=(16, 8))
plt.pie(y,
        labels=x,                         # Nhãn của các nhóm
        colors=['red', 'blue', 'green'],  # Màu sắc của các nhóm
        autopct='%1.1f%%',                # Format hiển thị giá trị %
        shadow=False)
plt.title("Average of Petal Length", fontsize=18)
plt.show()

Kết quả:

Biểu đồ tròn thể hiện tỷ lệ kích thước cánh hoa
Hình 3. Biểu đồ tròn thể hiện tỷ lệ kích thước cánh hoa

Ba loài có số lượng bằng nhau nên mỗi phần chiếm 33.3%.

4. Biểu đồ phân tán

Biểu đồ phân tán vẽ từng điểm dữ liệu trên mặt phẳng hai chiều, dùng hàm plt.scatter(). Loại này rất hợp để xem dữ liệu có chia thành các cụm hay không, hoặc hai biến có liên quan với nhau không.

Ví dụ: vẽ chiều dài và chiều rộng cánh hoa của tất cả 150 bông.

# lấy x, y
x = df_iris['Petal.Length'].values
y = df_iris['Petal.Width'].values

plt.figure(figsize=(16, 8))
plt.scatter(x, y, color='green')
plt.xlabel('Petal.Length', fontsize=16)
plt.ylabel('Petal.Width', fontsize=16)
plt.title("Average of Petal Length", fontsize=18)
plt.show()

Kết quả:

Kích thước cánh hoa được phân thành cụm trong biểu đồ phân tán
Hình 4. Kích thước cánh hoa được phân thành cụm trong biểu đồ phân tán

Nhìn đồ thị thấy ngay các điểm tách thành cụm rõ ràng: một cụm nhỏ ở góc dưới bên trái (loài setosa cánh hoa ngắn) và một cụm lớn kéo dài phía trên. Đây chính là thứ mà nhìn bảng số liệu sẽ rất khó nhận ra.

Tổng kết

Với 4 hàm plt.plot(), plt.bar(), plt.pie(), plt.scatter() là các bạn đã vẽ được phần lớn các biểu đồ cần dùng hằng ngày. Thử lấy file log dữ liệu cảm biến của bạn, đọc bằng Pandas rồi vẽ bằng Matplotlib xem, sẽ thấy rất nhiều thứ thú vị đấy.

Nếu thấy bài viết này hay, hãy chia sẻ tới bạn bè đang học Python nhé. Bài tiếp theo chúng ta sẽ tìm hiểu thư viện Scikit-learn.

Rate this post

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *