Giới thiệu
Biểu đồ tròn (pie chart) là cách phổ biến thể hiện tỷ lệ phần trăm. Matplotlib cho phép làm nổi bật một phần (explode), hiển thị giá trị thực thay vì phần trăm, tùy chỉnh góc xoay, v.v.
Cài đặt
pip install matplotlib
Dữ liệu mẫu
tennis_stats = (
('Federer', 20),
('Nadal', 20),
('Djokovic', 17),
('Murray', 3),
)
Biểu đồ tròn cơ bản
import matplotlib.pyplot as plt
titles = [t for _, t in tennis_stats]
players = [p for p, _ in tennis_stats]
plt.pie(titles, labels=players, autopct='%1.1f%%')
plt.gca().axis('equal') # Đảm bảo tròn trơn
plt.show()
Tùy chỉnh góc xoay và chiều
plt.pie(titles, labels=players,
startangle=60, # Xoay bắt đầu 60 độ
counterclock=False, # Chiều kim đồng hồ
autopct='%1.1f%%')
plt.show()
Làm nổi bật một phần (explode)
Tham số explode là tuple cùng độ dài dữ liệu, giá trị > 0 sẽ tách phần đó ra xa tâm.
explode = (0, 0, 0.1, 0) # Tách phần Djokovic (index 2)
plt.pie(titles, labels=players, explode=explode, autopct='%1.1f%%')
plt.show()
Hiển thị giá trị thực thay vì phần trăm
Dùng autopct với function tùy chỉnh:
from matplotlib.ticker import FuncFormatter
total = sum(titles)
# Map phần trăm nguyên → giá trị thực
values = {int(100 * t / total): t for _, t in tennis_stats}
def format_values(pct, **kwargs):
return str(values.get(int(pct), ''))
explode = (0, 0, 0.1, 0)
plt.pie(titles, labels=players, explode=explode, autopct=format_values)
plt.show()
Code hoàn chỉnh
import matplotlib.pyplot as plt
from matplotlib.ticker import FuncFormatter
tennis_stats = (('Federer', 20), ('Nadal', 20), ('Djokovic', 17), ('Murray', 3))
titles = [t for _, t in tennis_stats]
players = [p for p, _ in tennis_stats]
total = sum(titles)
values = {int(100 * t / total): t for _, t in tennis_stats}
def format_values(pct, **kwargs):
return str(values.get(int(pct), ''))
explode = (0, 0, 0.1, 0)
plt.pie(titles, labels=players, explode=explode, autopct=format_values)
plt.title('Grand Slam Titles')
plt.show()
Kết quả
Biểu đồ tròn với phần Djokovic tách ra, hiển thị số lượng titles thực (20, 20, 17, 3) thay vì phần trăm.