如何使用Python Matplotlib绘制带有单个饼图的突出显示?

如何使用Python Matplotlib绘制带有单个饼图的突出显示?

简介

什么是您最喜欢的图表类型?如果您向管理层或业务分析师提出这个问题,那么立刻的答案就是饼图!它是一种非常常见的呈现百分比的方式。

如何操作

1.通过以下命令安装matplotlib

pip install matplotlib

2.导入matplotlib。

import matplotlib.pyplot as plt

3.准备临时数据。

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

4.下一步是准备数据。

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

5.创建饼图,将值设置为标题,标签设置为球员名称。

autopct参数-将值设置为百分数以一位小数的格式显示。axis(‘equals’)-确保饼图看起来是圆的。 .show-显示生成的图形。

注意-执行.show会阻止程序的执行。当关闭窗口时,程序将恢复。

plt.pie(titles, labels=players, autopct='%1.1f%%')
plt.gca().axis('equal')
(-1.1000000175619362,
1.1000000072592333,
-1.1090350248729983,
1.100430247887797)

如何使用Python Matplotlib绘制带有单个饼图的突出显示?

6.显示图表。

plt.show()

7.有几个有趣的参数可以调整饼/ s。 startangle-旋转楔/派的开始。
counterclock – 你想设置的方向,默认是True。

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

如何使用Python Matplotlib绘制带有单个饼图的突出显示?

8.现在对于像我这样的人来说,百分比一无所知。请记住,输出图表是发送给那些对您代码中深处隐藏的值毫无头绪的人的。因此,除了通过饼的分裂方式自我解释的百分比之外,我们可以展示实际的标题吗?

好吧,这有点棘手,因为您需要编写自定义函数。看一下下面的内容。

我将创建一个自定义函数- format_values,以创建具有百分比作为键的字典,因此我们可以检索引用的值。

例如

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 = (0, 0, 0.1, 0.0)
plt.pie(titles, labels=players, explode=explode, autopct=format_values)

plt.show()

#值越大,分离越远。
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}

如何使用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, '费德勒'),
Text(-1.2999999999999945, -1.2171478395895002e-07, '纳达尔'),
Text(0.39420486628845763, -1.0269384223966398, '德约科维奇'),
Text(1.086457194390738, -0.17207778693546258, '穆雷')],
[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')])

如何使用Python Matplotlib绘制带有单个饼图的突出显示?

最后,将所有部分组合在一起。

示例

# 导入
import matplotlib.pyplot as plt
from matplotlib.ticker import FuncFormatter

# 准备数据
网球数据 = (('费德勒', 20),('纳达尔', 20),('德约科维奇', 17),('穆雷', 3),)

titles = [title for player, title in 网球数据]
players = [player for player, title in 网球数据]

total = sum(title for player, title in 网球数据)
values = {int(100 * title / total): title for player, title in 网球数据}

# 自定义函数
def format_values(percent, **kwargs):
    value = values[int(percent)]
    return '{}'.format(value)

# 炸开以区分饼图/楔形图
炸开 = (0, 0, 0.1, 0.0)
plt.pie(titles, labels=players, explode=炸开, autopct=format_values)

plt.show()

如何使用Python Matplotlib绘制带有单个饼图的突出显示?

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程