python中饼图绘制

一、饼图绘制参数详解

1、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)

参数:

  • x:指定绘图的数据
  • explode:指定饼图某些部分的突出显示,即呈现爆炸式
  • labels:为饼图添加标签说明,类似于图例说明
  • colors:指定饼图的填充色
  • autopct:自动添加百分比显示,可以采用格式化的方法显示
  • pctdistance:设置百分比标签与圆心的距离
  • shadow:是否添加饼图的阴影效果
  • labeldistance:设置各扇形标签(图例)与圆心的距离
  • startangle:设置饼图的初始摆放角度

  • radius:设置饼图的半径大小

  • counterclock:是否让饼图按逆时针顺序呈现

  • wedgeprops:设置饼图内外边界的属性,如边界线的粗细、颜色等

  • textprops:设置饼图中文本的属性,如字体大小、颜色等

  • center:指定饼图的中心点位置,默认为原点

  • frame:是否要显示饼图背后的图框,如果设置为True的话,需要同时控制图框x轴、y轴的范围和饼图的中心位置

返回值

  • patches:列表。matplotlib.patches.Wedge实例列表。
  • text:列表。matplotlib.text.Text实例label的列表。
  • autotexts:列表。A是数字标签的Text实例列表。仅当参数autopct不为None时才返回。

官方链接:https://matplotlib.org/devdocs/api/_as_gen/matplotlib.pyplot.pie.html

二、实例应用

 1 import numpy as np
 2 import matplotlib.pyplot as plt
 3 
 4 fig, ax = plt.subplots(figsize=(6, 3), subplot_kw=dict(aspect="equal"))
 5 
 6 recipe = ["375 g flour",
 7           "75 g sugar",
 8           "250 g butter",
 9           "300 g berries"]
10 
11 data = [float(x.split()[0]) for x in recipe]
12 ingredients = [x.split()[-1] for x in recipe]
13 
14 
15 def func(pct, allvals):
16     absolute = int(pct/100.*np.sum(allvals))
17     return "{:.1f}%\n({:d} g)".format(pct, absolute)
18 
19 colors=['red', 'yellow', 'magenta','purple','black']
20 
21 wedges, texts, autotexts = ax.pie(data, autopct=lambda pct: func(pct, data),
22                                   wedgeprops = {'linewidth': 1, 'edgecolor':'green'},# 设置饼图内外边界的属性值
23                                   textprops = {'fontsize':12, 'color':'white'},  #设置标签里的字体大小、颜色属性
24                                   startangle = 180, #初始角度
25                                   colors = colors) #饼状填充的颜色
26 print(wedges,'\n')
27 print(texts,'\n')
28 print(autotexts,'\n')
29 ax.legend(wedges, ingredients,
30           title="Ingredients",
31           loc="center left",
32           bbox_to_anchor=(1, 0, 0.5, 1))
33 
34 plt.setp(autotexts, size=10, weight="bold")
35 
36 ax.set_title("Matplotlib bakery: A pie")
37 
38 plt.show()

 1 # 饼图的绘制
 2 # 导入第三方模块
 3 import matplotlib.pyplot as plt
 4 
 5 # 构造数据
 6 edu = [0.2515,0.3724,0.3336,0.0368,0.0057]
 7 labels = ['中专','大专','本科','硕士','其他']
 8 # 添加修饰的饼图 
 9 explode = [0,0.1,0,0,0]  # 生成数据,用于突出显示大专学历人群
10 colors=['#9999ff','#ff9999','#7777aa','#2442aa','#dd5555']  # 自定义颜色
11 
12 # 中文乱码和坐标轴负号的处理
13 plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
14 plt.rcParams['axes.unicode_minus'] = False
15 
16 # 将横、纵坐标轴标准化处理,确保饼图是一个正圆,否则为椭圆
17 plt.axes(aspect='equal')
18 # 绘制饼图
19 plt.pie(x = edu, # 绘图数据
20         explode=explode, # 突出显示大专人群
21         labels=labels, # 添加教育水平标签
22         colors=colors, # 设置饼图的自定义填充色
23         autopct='%.1f%%', # 设置百分比的格式,这里保留一位小数
24         pctdistance=0.8,  # 设置百分比标签与圆心的距离
25         labeldistance = 1.1, # 设置教育水平标签与圆心的距离
26         startangle = 180, # 设置饼图的初始角度
27         radius = 1.2, # 设置饼图的半径
28         counterclock = False, # 是否逆时针,这里设置为顺时针方向
29         wedgeprops = {'linewidth': 1.5, 'edgecolor':'green'},# 设置饼图内外边界的属性值
30         textprops = {'fontsize':10, 'color':'black'}, # 设置文本标签的属性值
31         )
32 
33 # 添加图标题
34 plt.title('失信用户的受教育水平分布')
35 # 显示图形
36 plt.show()

 1 # 导入第三方模块
 2 import pandas as pd
 3 # 构建序列
 4 data1 = pd.Series({'中专':0.2515,'大专':0.3724,'本科':0.3336,'硕士':0.0368,'其他':0.0057})
 5 # 将序列的名称设置为空字符,否则绘制的饼图左边会出现None这样的字眼
 6 data1.name = ''
 7 # 控制饼图为正圆
 8 plt.axes(aspect = 'equal')
 9 # plot方法对序列进行绘图
10 data1.plot(kind = 'pie', # 选择图形类型
11            autopct='%.1f%%', # 饼图中添加数值标签
12            radius = 1, # 设置饼图的半径
13            startangle = 180, # 设置饼图的初始角度
14            counterclock = False, # 将饼图的顺序设置为顺时针方向
15            title = '失信用户的受教育水平分布', # 为饼图添加标题
16            wedgeprops = {'linewidth': 1.5, 'edgecolor':'green'}, # 设置饼图内外边界的属性值
17            textprops = {'fontsize':10, 'color':'black'} # 设置文本标签的属性值
18           )
19 # 显示图形
20 plt.show()

posted on 2019-09-10 09:48  LiErRui  阅读(1720)  评论(0)    收藏  举报

导航