Python matplotlib绘制饼图
继前面使用matplotlib绘制折线图、散点图、柱状图和直方图,本篇文章继续介绍使用matplotlib绘制饼图。
一、matplotlib绘制饼图
# coding=utf-8
import matplotlib.pyplot as plt
election_data = {'Biden': 290, 'Trump': 214, 'Others': 538-290-214}
candidate = [key for key in election_data]
votes = [value for value in election_data.values()]
plt.figure(figsize=(10, 10), dpi=100)
plt.pie(votes, labels=candidate, autopct="%1.2f%%", colors=['c', 'm', 'y'],
textprops={'fontsize': 24}, labeldistance=1.05)
plt.legend(fontsize=16)
plt.title("2020年A国大选票数占比", fontsize=24)
plt.show()
运行结果:
pie(): matplotlib中绘制饼图的函数。第一个参数传入用于绘制饼图的数据列表,其他参数都是关键字参数。labels参数用于设置每个扇形的标签,说明每个扇形的数据归属。autopct参数用于设置饼图中的百分比,一般保留两位小数,传入"%1.2f%%"即可。colors参数用于设置每个扇形的颜色,与数据列表一一对应,传入一个与数据列表长度相等的列表。textprops参数用于设置标签和百分比的字体、大小等,传入一个字典。labeldistance参数用于设置标签与饼图的距离,默认值为1.1。
饼图将一个圆饼按照各分类的占比划分成多个扇形,整个圆饼代表数据的总量,每个扇形表示该分类占总体的比例大小,所有扇形相加的和等于100%。饼图适用于表示不同分类在总体中的占比情况,通过弧度大小来比较不同分类的占比大小,尤其在需要突出显示其中某一个部分的占比时。
上面的饼图绘制了2020年A国大选的票数占比情况,可以一目了然地看到候选人的得票占比情况。如果需要突出显示某位候选人的得票占比,可以对饼图进行分离展示。
二、matplotlib旋转饼图和突出显示
import matplotlib.pyplot as plt
election_data = {'Biden': 290, 'Trump': 214, 'Others': 538-290-214}
candidate = [key for key in election_data]
votes = [value for value in election_data.values()]
plt.figure(figsize=(10, 10), dpi=100)
explode = (0.1, 0, 0)
plt.pie(votes, labels=candidate, autopct="%1.2f%%", colors=['c', 'm', 'y'], textprops={'fontsize': 24},
labeldistance=1.05, explode=explode, startangle=90, shadow=True)
plt.legend(loc='upper right', fontsize=16)
plt.title("2020年A国大选票数占比", fontsize=24)
plt.axis('equal')
plt.show()
运行结果:
在绘制饼图的pie()函数中,explode参数用于设置每个扇形到圆心的距离,传入一个与数据列表长度相等的列表,默认每个扇形到圆心的距离都是0,将想要分离展示的扇形距离设置成一个适合的值,如0.1,即可将该部分突出展示。为了展示效果更好,可以使用startangle参数对饼图进行旋转(如将分离的扇形旋转到左侧),给startangle参数传入一个角度,将饼图逆时针旋转对应的角度,startangle参数表示的是饼图的起始角度,默认为正右方向,即传统的x轴正方形,此方向表示0度,设置起始角度后可以实现旋转的效果。对扇形进行分离展示后,将shadow参数设置为True,给饼图添加阴影,使饼图更立体,饼图切分的效果会更好。
在对饼图进行分离后,饼图的布局会发生变化,为了控制饼图占用的区域是一个正方形,且避免饼图变成椭圆形,使用axis('equal')函数,传入'equal'参数。
在上一张饼图的基础上,经过设置后,将获胜者Biden的得票率突出显示,可以更突出地展示获胜者的得票占比。
三、matplotlib绘制环形饼图
import matplotlib.pyplot as plt
election_data = {'Biden': 290, 'Trump': 214, 'Others': 538-290-214}
candidate = [key for key in election_data]
votes = [value for value in election_data.values()]
plt.figure(figsize=(10, 10), dpi=100)
explode = (0, 0, 0)
plt.pie(votes, labels=candidate, explode=explode, autopct="%1.2f%%", colors=['c', 'm', 'y'],
textprops={'fontsize': 24}, labeldistance=1.05, pctdistance=0.85, startangle=90)
plt.pie([1], radius=0.7, colors='w')
plt.legend(loc='upper right', fontsize=16)
plt.title("2020年A国大选票数占比", fontsize=24)
plt.axis('equal')
plt.show()
运行结果:
要绘制环形的饼图,在绘制出饼图后,再次调用pie()函数绘制一个更小的纯白饼图即可,先后顺序不能相反。
在绘制纯白的饼图时,传入只有一个数据的列表,一条数据会占满整个饼图,占比100%,颜色设置为colors='w'。radius参数默认为1,如果第一张饼图的radius参数是1,设置白色饼图的radius参数小于1,得到的白色饼图就会小于第一张饼图。此外不需要设置其他参数,白色饼图不需要显示百分比,不需要显示标签等。
绘制完成小的白色饼图,环形效果就实现了,还需要调整第一张饼图的百分比的显示位置。在pie()函数中,pctdistance参数用于设置百分比显示离圆心的距离,默认值是0.6,设置环形效果时,可以将pctdistance参数增大,使百分比显示在环形的中间。同时,因为环形饼图是通过遮挡实现的,阴影展示不完全,看起来比较别扭,所以不设置shadow参数,去掉阴影。