Computer >> Máy Tính >  >> Lập trình >> Python

Làm thế nào để vẽ biểu đồ hình tròn với một hình tròn duy nhất được đánh dấu bằng Python Matplotlib?

Giới thiệu ..

Loại biểu đồ yêu thích nhất của bạn là gì? Nếu bạn đặt câu hỏi này cho ban giám đốc hoặc một nhà phân tích kinh doanh, câu trả lời ngay lập tức là biểu đồ hình tròn !. Đây là một cách rất phổ biến để trình bày tỷ lệ phần trăm.

Cách thực hiện ..

1.Cài đặt matplotlib bằng lệnh sau.

pip install matplotlib

2.Nhập matplotlib

import matplotlib.pyplot as plt

3.Chuẩn bị dữ liệu tạm thời.

tennis_stats = (('Federer', 20),('Nadal', 20),('Djokovic', 17),('Murray', 3),)

Bước tiếp theo là chuẩn bị dữ liệu.

titles = [title for player, title in tennis_stats]
players = [player for player, title in tennis_stats]

5.Tạo biểu đồ hình tròn với các giá trị là tiêu đề và nhãn là tên trình phát.

tham số autopct - Để định dạng giá trị để nó hiển thị dưới dạng phần trăm đến một chữ số thập phân. axis ('bằng') - Để đảm bảo biểu đồ hình tròn trông tròn. .show - Để hiển thị biểu đồ kết quả.

Lưu ý- Đang thực thi .show chặn việc thực thi chương trình. Chương trình sẽ tiếp tục khi bạn đóng cửa sổ.

plt.pie(titles, labels=players, autopct='%1.1f%%')
plt.gca().axis('equal')


(-1.1000000175619362,
1.1000000072592333,
-1.1090350248729983,
1.100430247887797)

Làm thế nào để vẽ biểu đồ hình tròn với một hình tròn duy nhất được đánh dấu bằng Python Matplotlib?

6.Hiển thị biểu đồ.

plt.show()

7. Có một số tham số hấp dẫn để chơi với / s. startangle - Xoay phần đầu của nêm / bánh nướng.
counterclock - Hướng bạn muốn thiết lập, mặc định là True.

plt.pie(titles, labels=players, startangle=60, counterclock=False,autopct='%1.1f%%')
plt.show()

Làm thế nào để vẽ biểu đồ hình tròn với một hình tròn duy nhất được đánh dấu bằng Python Matplotlib?

8.Bây giờ đối với một số người như tôi, tỷ lệ phần trăm chẳng có nghĩa lý gì. Hãy nhớ rằng đồ thị đầu ra được gửi cho một số người không có manh mối về các giá trị đang ẩn sâu bên trong mã của bạn. Vì vậy, thay vì tỷ lệ phần trăm, rõ ràng là tự giải thích từ cách tách của chiếc bánh, chúng ta có thể hiển thị các tiêu đề thực tế không?.

Chà, điều đó hơi phức tạp vì bạn cần viết một hàm tùy chỉnh. Hãy xem bên dưới.

Tôi sẽ tạo một hàm tùy chỉnh - format_values ​​để tạo một từ điển với khóa là tỷ lệ phần trăm, vì vậy chúng tôi có thể truy xuất giá trị được tham chiếu.

Ví dụ

from matplotlib.ticker import FuncFormatter
total = sum(title for player, title in tennis_stats)
print(total)
values = {int(100 * title / total): title for player, title in tennis_stats}
print(values)

def format_values(percent, **kwargs):
value = values[int(percent)]
return '{}'.format(value)

# explode to seperate the pie/wedges.
explode = (0, 0, 0.1, 0.0)
plt.pie(titles, labels=players, explode=explode, autopct=format_values)

plt.show()

# the more the value the more farther it will be seperated.
explode = (0.3, 0.2, 0.0, 0.0)
plt.pie(titles, labels=players, explode=explode, autopct=format_values)


60
{33: 20, 28: 17, 5: 3}

Làm thế nào để vẽ biểu đồ hình tròn với một hình tròn duy nhất được đánh dấu bằng Python Matplotlib?

([<matplotlib.patches.Wedge at 0x2279cf8dd00>,
<matplotlib.patches.Wedge at 0x2279cf9b1f0>,
<matplotlib.patches.Wedge at 0x2279cf9b8b0>,
<matplotlib.patches.Wedge at 0x2279cf9bf70>],
[Text(0.6999999621611965, 1.2124355871444568, 'Federer'),
Text(-1.2999999999999945, -1.2171478395895002e-07, 'Nadal'),
Text(0.39420486628845763, -1.0269384223966398, 'Djokovic'),
Text(1.086457194390738, -0.17207778693546258, 'Murray')],
[Text(0.44999997567505484, 0.7794228774500078, '20'),
Text(-0.7999999999999966, -7.490140551320001e-08, '20'),
Text(0.2150208361573405, -0.5601482303981671, '17'),
Text(0.5926130151222206, -0.09386061105570685, '3')])

Làm thế nào để vẽ biểu đồ hình tròn với một hình tròn duy nhất được đánh dấu bằng Python Matplotlib?

Cuối cùng, kết hợp mọi thứ lại với nhau.

Ví dụ

# imports
import matplotlib.pyplot as plt
from matplotlib.ticker import FuncFormatter

# prepare data
tennis_stats = (('Federer', 20),('Nadal', 20),('Djokovic', 17),('Murray', 3),)

titles = [title for player, title in tennis_stats]
players = [player for player, title in tennis_stats]

total = sum(title for player, title in tennis_stats)
values = {int(100 * title / total): title for player, title in tennis_stats}

# custom function
def format_values(percent, **kwargs):
value = values[int(percent)]
return '{}'.format(value)

# explode to seperate the pie/wedges.
explode = (0, 0, 0.1, 0.0)
plt.pie(titles, labels=players, explode=explode, autopct=format_values)

plt.show()

Làm thế nào để vẽ biểu đồ hình tròn với một hình tròn duy nhất được đánh dấu bằng Python Matplotlib?