Lập trình
xử lý dữ liệu

Học kì 1, năm học 2026–2027

Viện Trí tuệ nhân tạo, Trường ĐH Công nghệ, ĐHQGHN

Bài 12
Trực quan hoá cơ bản

matplotlib, pandas plot và cách tạo biểu đồ tự giải thích được.

Bài trước

  • LLM trích xuất dữ liệu phi cấu trúc; chất lượng được đo bằng tập dữ liệu gán nhãn thủ công.
  • Sau bước làm sạch và trích xuất, dữ liệu đã sẵn sàng để trình bày bằng biểu đồ.

Tổng quan

  1. Vì sao cần biểu đồ và nên chọn dạng nào?
  2. matplotlib: Figure, Axes và bốn dạng biểu đồ cơ bản
  3. pandas .plot và xuất hình từ pipeline
  4. Biểu đồ rõ ràng và trung thực
  5. Làm việc với AI thì sao?

1.
Vì sao cần biểu đồ?
Nên chọn dạng nào?

describe() không cho biết hình dạng của dữ liệu.

Bốn bộ dữ liệu cùng bảng thống kê

Bộ tứ Anscombe
Bộ tứ Anscombe có cùng trung bình, phương sai, tương quan và đường hồi quy; nhưng vẽ biểu đồ sẽ cho thấy bốn cấu trúc hoàn toàn khác nhau.

Câu hỏi chọn dạng biểu đồ

Bạn muốn nhìn thấy… Chọn biểu đồ dạng… Ví dụ trong bài này
Diễn biến theo thời gian đường (line) đánh giá theo tháng
So sánh giữa các nhóm cột (bar; dùng thanh ngang nếu tên dài) giá theo quận
Hình dáng phân phối histogram phân phối giá
Quan hệ hai đại lượng phân tán (scatter) vị trí × giá

Chọn dạng biểu đồ dựa trên câu hỏi phân tích. Nếu chỉ cần nhấn mạnh một con số thì không cần vẽ biểu đồ.

2.
matplotlib:
Figure, Axes
& bốn dạng cơ bản

Giao diện lập trình chung cho nhiều dạng biểu đồ.

Bộ đôi fig và ax

  • Figure là toàn bộ hình; Axes là từng vùng vẽ trong hình.
  • Dùng ax.* giúp kiểm soát từng chi tiết và thuận tiện khi ghép nhiều vùng vẽ.

Đọc một biểu đồ hoàn chỉnh

Đọc biểu đồ
4 thành phần tối thiểu: tiêu đề nêu thông điệp, chú thích nêu điểm cần lưu ý, nhãn trục có đơn vị, nguồn dữ liệu.

Biểu đồ đường: diễn biến theo thời gian

Biểu đồ đường số đánh giá theo tháng

Kết quả tổng hợp theo tháng ở bài 8 được dùng trực tiếp để vẽ biểu đồ.

Biểu đồ thanh ngang: xếp hạng nhóm

Biểu đồ thanh ngang giá theo quận

Thanh ngang giúp đọc tên quận dễ hơn. bar_label ghi giá trị trực tiếp; màu cam chỉ dùng cho nhóm cần nhấn mạnh.

Histogram: hình dạng phân phối

Histogram giá thang log

Thang log giúp quan sát rõ phân phối giá. Số khoảng bins quá ít làm mất cấu trúc; quá nhiều làm tăng nhiễu.

Biểu đồ phân tán: 18.000 điểm theo vị trí

Biểu đồ phân tán toạ độ theo giá

Kinh độ, vĩ độ và hai nhóm màu tạo thành một bản đồ điểm đơn giản. alpha=0.45 — độ trong suốt thấp — giúp hạn chế hiện tượng các điểm che lấp nhau.

subplots: đặt hai vùng vẽ cạnh nhau

Khi so sánh hai mốc chụp, sharey=True dùng chung thang đo, tránh tạo ấn tượng sai do hai trục khác nhau.

3.
pandas .plot
& xuất hình từ pipeline

Vẽ nhanh khi khám phá dữ liệu.

.plot: vẽ nhanh khi khám phá dữ liệu

pandas cũng gọi matplotlib và tự tạo các thành phần mặc định. .plot phù hợp để khám phá nhanh dữ liệu; fig, ax phù hợp với hình chất lượng cao đưa vào báo cáo.

savefig: xuất hình từ pipeline

Quan trọng Mọi hình trong báo cáo được sinh tự động vào figures/ khi chạy pipeline. Khi cần sửa hình, hãy sửa mã nguồn và chạy lại thay vì chỉnh tay hoặc chụp màn hình.

Hai cách lưu hình: raster và vector

Ảnh raster như PNG lưu một lưới điểm ảnh (pixel); phóng to sẽ vỡ, dung lượng nặng theo số điểm ảnh — nên dpi chỉ có nghĩa với ảnh raster. Ảnh vector như SVG và PDF lưu đường nét và chữ; phóng bao nhiêu cũng nét, dung lượng nặng theo số đối tượng vẽ.

Chọn định dạng theo mật độ điểm

HìnhPNGSVG
Đường, ~41 điểm48 KB23 KB
Phân tán, 18.000 điểm156 KB~2,7 MB
Quan trọng Ảnh vector nét hơn, nhưng mỗi điểm là một đối tượng; hình quá dày điểm làm SVG phình gấp ~18× PNG. Bài giảng này dùng SVG cho biểu đồ đường, cột, histogram; PNG cho bản đồ điểm.

PDF cũng là ảnh vector, dùng cho báo cáo và in ấn: 6 KB cho biểu đồ đường, 296 KB cho bản đồ điểm.

rcParams: khai báo phong cách một lần

Khai báo một lần ở đầu notebook hoặc script để mọi hình có cùng phong cách. Tính nhất quán của các biểu đồ trong báo cáo là một tiêu chí quan trọng.

4.
Biểu đồ rõ ràng
và trung thực

Cách trình bày có thể khiến người đọc hiểu sai dù số liệu đúng.

Trục y bị cắt làm phóng đại chênh lệch

So sánh trục y cắt và trục y từ 0
Cùng một bộ số liệu, trục bắt đầu từ 30 làm chênh lệch có vẻ lớn hơn. Với biểu đồ cột, trục biểu diễn độ dài cần bắt đầu từ 0.

Giảm chi tiết trang trí, tăng tín hiệu

  • Bỏ đường viền trên/phải và làm mờ lưới để dữ liệu nổi bật hơn.
  • Mỗi hình nên truyền đạt một thông điệp chính.
  • Dùng màu nhất quán; chỉ dùng màu thứ hai để nhấn một đối tượng cần chú ý.

Tiêu chí kiểm tra

Trước khi cho hình vào báo cáo
  1. Tiêu đề nêu thông điệp, không chỉ gọi tên biểu đồ.
  2. Trục có nhãn và đơn vị; biểu đồ cột bắt đầu từ 0; hình so sánh dùng chung thang đo.
  3. Ghi nguồn dữ liệu và mốc chụp.
  4. Người đọc có thể hiểu đúng hình mà không cần đọc tiêu đề hay không?

Tổng kết

  • Thống kê mô tả không cho thấy toàn bộ cấu trúc; dạng biểu đồ phải phù hợp với câu hỏi.
  • fig, ax cùng biểu đồ đường, cột, histogram và phân tán đáp ứng phần lớn nhu cầu cơ bản.
  • .plot dùng để khám phá; savefig và rcParams hỗ trợ xuất hình nhất quán.
  • Biểu đồ cần dùng thang đo phù hợp, có thông điệp rõ và ghi nguồn dữ liệu.

Làm việc với AI thì sao?

🤖 Làm việc với AI
AI làm tốt Sinh mã nguồn matplotlib từ mô tả, chẳng hạn biểu đồ thanh ngang có nhãn giá trị và màu nhấn cho thanh lớn nhất; hỗ trợ tra cứu cách dùng API.
AI hay sai Tạo biểu đồ cột có trục bị cắt, đặt tiêu đề chung chung hoặc dùng quá nhiều màu trang trí.

Kiểm chứng thế nào?

🤖 Làm việc với AI
  • Kiểm tra mọi hình do AI sinh bằng danh sách ở phần 4.
  • Đối chiếu ít nhất một giá trị trên hình với dữ liệu gốc, chẳng hạn kiểm tra thanh lớn nhất bằng nlargest.

Đọc thêm

  • McKinney, Python for Data Analysis, 3rd ed. — ch. 9 (Plotting and Visualization).
  • VanderPlas, Python Data Science Handbook, 2nd ed. — Part 4 (Matplotlib).
  • 📖 Tự học: matplotlib docs — Anatomy of a figure.