文章目录

  • 绘制饼图
  • 代码
  • 运行结果
  • 代码分析


绘制饼图

代码

import matplotlib.pyplot as plt
# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']
# 设置图片大小和分辨率
plt.figure(figsize=(9, 6), dpi=100)
x = [217, 743, 426]
labels = ['走路', '自行车', '公交车']
explode = [0, 0.05, 0]

_, _, autotexts = plt.pie(x=x, labels=labels, shadow=1,
                          autopct='%.lf%%', explode=explode)
# 将饼图字体改成白色
for autotext in autotexts:
    autotext.set_color('white')

plt.title('3种去学校的方式')
plt.show()

运行结果

python制作饼状图 python怎么制作饼图_后端

代码分析

绘制饼图用到的方法为pie(),它的原型如下。

pie(
        x, explode=None, labels=None, colors=None, autopct=None,
        pctdistance=0.6, shadow=False, labeldistance=1.1,
        startangle=None, radius=None, counterclock=True,
        wedgeprops=None, textprops=None, center=(0, 0), frame=False,
        rotatelabels=False, *, data=None)

重要参数

  • x:传入的数据。该数据类似于数组,其中每个元素代表每个饼块的比例。如果所有元素之和sum(x) > 1,则每个元素都会被除以sum(x),也就是进行归一化处理。
  • explode:默认情况下每个饼块都是彼此相连的,有时为了突出某一个饼块,我们可以将其与其他部分分开(即饼图爆裂),自定义一个类似于数组的数据来规定每个饼块的爆裂距离。
  • labels:默认情况下x没有标签。如果想定义标签,需要启用labels参数,它通常和数据x的维度相同。
  • labeldistance:标签位置,如果定义标签,则默认位于1.1倍半径处。
  • autopct:默认情况下不显示每个饼块的百分比标注,如果启用autopct,则可以自定义每个饼块的百分比属性,如保留几位小数,格式类似于print()语句的format定义。
  • pctdistance:每个饼块都要显示一个百分数字符串,该参数将指明在何处显示这个字符串。通过该参数可以自定义一个比值,它表示沿着半径偏离圆心的比例,默认为0.6,表示在距离圆心60%半径处显示百分数。
  • shadow:布尔值,自定义饼图是否有阴影属性。

观察图8-24所示的饼图,可以发现,“自行车”这个类别和其他两类没有紧密相连,而是稍微分开了一点,这是因为使用了pie()方法中的explode参数,该参数是一个列表,列表中的第二个元素值为0.05(见代码08行),它对标x(代码第06行定义)中的第二个元素743(即自行车)。这个“0.05”表示当前饼块相对于其他饼块的偏移距离,但并非具体的值(如多少cm),而是相对于半径的比值。假设这个饼图的半径为5cm,那么实际偏移的量为5cm×0.05=0.25cm。这一功能使我们绘制出来的饼图更加美观,且可突出显示关键数据。
关于autopat参数,我们这里保留了一位有效数字(代码第11行)。此外,为了让饼图中的文字更加醒目,我们将饼图的字体修改为白色(代码第10~14行)。