饼状图常用于数据统计和分析领域,通常分为2D与3D饼状图。饼状图显示一个数据系列(数据系列:在图表中绘制的相关数据点,这些数据源自数据表的行或列。在现实应用中,经常使用饼状图来展示数据分析的结果,这样可以更加直观的展示数据分析结果。在本节的内容中,将详细讲解使用Python绘制饼状图的知识。
5.1 绘制基本的饼状图
在数据可视化分析工作中,经常需要绘制和数据统计相关的柱状图。在本节的内容中,将详细讲解在Python程序中使用各种库绘制基本饼状图的知识。
5.1.1 绘制简易的饼状图
在Python程序中,可以使用Matplotlib中的函数matplotlib.pyplot.pie()绘制一个饼状图。请看下面的实例文件pie01.py,功能是使用Matplotlib绘制一个饼状图,可视化展示XX网站会员用户教育水平的分布信息。
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
# 构造数据
edu = [0.2515,0.3724,0.3336,0.0368,0.0057]
labels = ['中专','大专','本科','硕士','其他']
"""
绘制饼图
explode:设置各部分突出
label:设置各部分标签
labeldistance:设置标签文本距圆心位置,1.1表示1.1倍半径
autopct:设置圆里面文本
shadow:设置是否有阴影
startangle:起始角度,默认从0开始逆时针转
pctdistance:设置圆内文本距圆心距离
返回值
l_text:圆内部文本,matplotlib.text.Text object
p_text:圆外部文本
"""
# 绘制饼图
plt.pie(x = edu, # 绘图数据
labels=labels, # 添加教育水平标签
autopct='%.1f%%' # 设置百分比的格式,这里保留一位小数
)
# 添加图标题
plt.title('XX网站会员用户的教育水平分布')
plt.show() # 显示图形
执行效果如图5-1所示。
图5-1 执行效果
另外,我们也可以使用库Pygal中内置函数Pie()绘制饼状图。请看下面的实例文件pie01-1.py,功能是库Pygal绘制一个饼状图,可视化展示某年度浏览器产品的市场份额数据。
import pygal
pie_chart = pygal.Pie()
pie_chart.title = 'Browser usage in February 2012 (in %)'
pie_chart.add('IE', 19.5)
pie_chart.add('Firefox', 36.6)
pie_chart.add('Chrome', 36.3)
pie_chart.add('Safari', 4.5)
pie_chart.add('Opera', 2.3)
pie_chart.render_to_file('bar_chart.svg')
执行后会得到文件bar_chart.svg,效果如图5-2所示。
图5-2 文件bar_chart.svg的效果
5.1.2 修饰饼状图
请看下面的实例文件pie02.py,功能是以前面的例文件pie01.py为基础进行升级,修饰了使用Matplotlib绘制的饼状图,可视化展示XX网站会员用户教育水平的分布信息。
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
edu = [0.2515,0.3724,0.3336,0.0368,0.0057]
labels = ['中专','大专','本科','硕士','其他']
# 添加修饰的饼图
explode = [0,0.1,0,0,0]# 生成数据,用于突出显示大专学历人群
colors=['#9999ff','#ff9999','#7777aa','#2442aa','#dd5555']# 自定义颜色
# 中文乱码和坐标轴负号的处理
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False
# 将横、纵坐标轴标准化处理,确保饼图是一个正圆,否则为椭圆
plt.axes(aspect='equal')
# 绘制饼图
plt.pie(x = edu, # 绘图数据
explode=explode, # 突出显示大专人群
labels=labels, # 添加教育水平标签
colors=colors, # 设置饼图的自定义填充色
autopct='%.1f%%', # 设置百分比的格式,这里保留一位小数
pctdistance=0.8, # 设置百分比标签与圆心的距离
labeldistance = 1.1, # 设置教育水平标签与圆心的距离
startangle = 180, # 设置饼图的初始角度
radius = 1.2, # 设置饼图的半径
counterclock = False, # 是否逆时针,这里设置为顺时针方向
wedgeprops = {'linewidth': 1.5, 'edgecolor':'green'},# 设置饼图内外边界的属性值
textprops = {'fontsize':10, 'color':'black'}, # 设置文本标签的属性值
)
# 添加图标题
plt.title('XX网站会员用户的教育水平分布统计图')
# 显示图形
plt.show()
执行效果如图5-3所示。
图5-3 执行效果
5.1.3 突出显示某个饼状图的部分
在前面的实例文件pie02.py中,通过设置函数matplotlib.pyplot.pie()中的参数explode设置某个饼状部分突出显示。请看下面的例文件pie03.py,功能是使用Matplotlib绘制的饼状图,设置了某个饼状图部分突出显示。
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']='SimHei' #设置中文显示
plt.figure(figsize=(6,6)) #将画布设定为正方形,则绘制的饼图是正圆
label=['第一','第二','第三'] #定义饼图的标签,标签是列表
explode=[0.01,0.2,0.01] #设定各项距离圆心n个半径
#plt.pie(values[-1,3:6],explode=explode,labels=label,autopct='%1.1f%%')#绘制饼图
values=[4,7,9]
plt.pie(values,explode=explode,labels=label,autopct='%1.1f%%')#绘制饼图
plt.title('2018年饼图')
plt.savefig('./2018年饼图')
plt.show()
执行效果如图5-4所示。
图5-4 执行效果