Matplotlib 是Python中非常重要的2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形,通过 Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,错误图,散点图等。
今天小编带大家来学习饼图的绘制方法。饼图大家都很熟悉,主要表示离散变量各水平占比情况。在Python中,饼图的绘制可以使用matplotlib库中的pie函数,首先我们来看看这个函数的参数说明。
# 指定绘图的数据
plt.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, # 设置饼图内外边界的属性,如边界线的粗细、颜色等;
extprops=None, # 设置饼图中文本的属性,如字体大小、颜色等;
center=(0, 0), # 指定饼图的中心点位置,默认为原点
frame=False) # 是否要显示饼图背后的图框,如果设置为True的话,需要同时控制图框x轴、y轴的范围和饼图的中心位置;
1. 案例描述
接下来我们借用芝麻信用近300万失信人群的样本统计数据,实现饼图占比显示。该数据显示,从受教育水平上来看,中专占比25.15%,大专占比37.24%,本科占比33.36%,硕士占比3.68%,剩余的其他学历占比0.57%。
2. 设计思路
1) 图形选择
必须是“饼图柱状图”了。
2) 图表元素
- 通过爆裂的方式,突出显示想要显示的信息(比如“大专”);
- 每个人群的显示颜色不同;
- 显示出具体的数值;
3) 展示示例(excel为例)
如果用Excel绘制,应当是下面这样:
3. 代码实现
代码如下:
# 导入第三方模块
import matplotlib.pyplot as plt
# 设置绘图的主题风格(不妨使用R中的ggplot分隔)
plt.style.use('ggplot')
# 构造数据
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')
# 控制x轴和y轴的范围
plt.xlim(0,4)
plt.ylim(0,4)
# 绘制饼图
plt.pie(x = edu, # 绘图数据
explode=explode, # 突出显示大专人群
labels=labels, # 添加教育水平标签
colors=colors, # 设置饼图的自定义填充色
autopct='%.1f%%', # 设置百分比的格式,这里保留一位小数
pctdistance=0.8,# 设置百分比标签与圆心的距离
labeldistance = 1.15, # 设置教育水平标签与圆心的距离
startangle = 180, # 设置饼图的初始角度
radius = 1.5, # 设置饼图的半径
counterclock = False, # 是否逆时针,这里设置为顺时针方向
wedgeprops = {'linewidth': 1.5, 'edgecolor':'green'},# 设置饼图内外边界的属性值
textprops = {'fontsize':12, 'color':'k','fontproperties':"SimHei"}, # 设置文本标签的属性值
center = (1.8,1.8), # 设置饼图的原点
frame = 1 )# 是否显示饼图的图框,这里设置显示
# 删除x轴和y轴的刻度
plt.xticks(())
plt.yticks(())
# 添加图标题
plt.title('芝麻信用失信用户教育水平分布',
fontproperties="SimHei")
# 显示图形
plt.show()
结果显示: