pie()
函数概述
pie()
函数用于绘制饼图。
pie()
的函数签名为matplotlib.pyplot.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=0, radius=1, counterclock=True, wedgeprops=None, textprops=None, center=0, 0, frame=False, rotatelabels=False, *, normalize=None, data=None)
。
pie()
函数的参数如下:
x
:各个饼块的尺寸。类1维数组结构。explode
:每个饼块相对于饼圆半径的偏移距离,取值为小数。类1维数组结构。默认值为None
。labels
:每个饼块的标签。字符串列表。默认值为None
。colors
:每个冰块的颜色。类数组结构。**颜色会循环使用。**默认值为None
,使用当前色彩循环。autopct
:饼块内标签。None
或字符串或可调用对象。默认值为None
。如果值为格式字符串,标签将被格式化,如果值为函数,将被直接调用。pctdistance
:饼块内标签与圆心的距离。浮点数。默认值为0.6
,autopct
不为None
该参数生效。shadow
:饼图下是否有阴影。布尔值。默认值为False
。labeldistance
:饼块外标签与圆心的距离。浮点值或None
。默认值为1.1
。如果设置为None
,标签不会显示,但是图例可以使用标签。startangle
:饼块起始角度。浮点数。默认值为0
,即从x
轴开始。角度逆时针旋转。radius
:饼图半径。浮点数。默认值为1
.counterclock
:角度是否逆时针旋转。布尔值。默认值为True
。wedgeprops
:饼块属性。字典。默认值为None
。具体见matplotlib.patches.Wedge
。textprops
:文本属性。字典。默认值为None
。center
:饼图中心坐标。(float,float)
浮点数二元组。默认值为(0,0)
。frame
:是否绘制子图边框。布尔值。默认为False
。rotatelabels
:饼块外标签是否按饼块角度旋转。布尔值。默认为False
。normalize
:是否归一化。布尔值或None
。默认值为None
。True
:完全饼图,对x
进行归一化,sum(x)
==1。False
:如果sum(x)<=1
,绘制不完全饼图。如果sum(x)>1
,抛出ValueError
异常。None
:如果sum(x)>=1
,默认值为True
。如果sum(x)<1
,默认值为False
。- 注意:未来版本(当前版本3.3.3),默认值将改为
True
。绘制不完全饼图,需要明确传递normalize=False
。
pie()
的返回值为三元组。
patches
:matplotlib.patches.Wedge
对象序列。类型为列表。texts
:外标签Text
对象列表。类型为列表。autotexts
:只有autopct
属性不为None
才会返回值,饼块内标签Text
对象列表。类型为列表。
pie()
函数参数演示
import matplotlib.pyplot as plt
plt.rcParams['font.family']='SimHei'
x = [1, 5, 4, 3]
labels = ['a', 'b', 'c', 'd']
explode = [-0.1, 0, 0.1, 0]
colors =['r','b']
# 子图1,显示默认属性情况,为与子图2对比,添加了外标签
plt.subplot(241)
plt.pie(x, labels=labels)
plt.title('默认属性')
# 子图2,演示外标签相关属性
plt.subplot(242)
plt.pie(x, labels=labels,labeldistance=1.2,rotatelabels=True)
plt.title('外标签相关属性')
# 子图3,演示内标签相关属性,起始角度设置为30
plt.subplot(243)
plt.pie(x, autopct='%1.1f%%',pctdistance=0.4,startangle=30)
plt.title('内标签相关属性')
# 子图4,演示饼块分离、颜色循环、阴影
plt.subplot(244)
plt.pie(x, explode=explode, colors=colors,shadow=True)
plt.title('饼块分离、颜色循环')
# 子图5,演示修改饼图半径、角度顺时针旋转
plt.subplot(245)
plt.pie(x, radius=1.2,counterclock=False)
plt.title('修改半径、顺时针')
# 子图6,演示normalize为默认值None
plt.subplot(246)
x = [0.1, 0.2, 0.2, 0.3]
plt.pie(x)
# normalize为默认值None,这时sum(x)<1,相当于normalize=Fasle
# 运行时会有警告,因为未来版本默认normalize=True
# 建议绘制不完全饼图使用plt.pie(x,normalize=Fasle)
plt.title('normalize=None')
# 子图7,演示normalize为True,这时虽然sum(x)<1,但是会强制归一化,绘制完全饼图
plt.subplot(247)
x = [0.1, 0.2, 0.2, 0.3]
plt.pie(x,normalize=True)
plt.title('normalize=True')
# 子图8,演示normalize为False,这时sum(x)<1,绘制不完全饼图
plt.subplot(248)
x = [0.1, 0.2, 0.2, 0.3]
plt.pie(x,normalize=False)
plt.title('normalize=False')
plt.show()
pie()
函数返回值演示
输出:
([<matplotlib.patches.Wedge object at 0x0000015D7C3B29B0>,
<matplotlib.patches.Wedge object at 0x0000015D7C3B2EB8>,
<matplotlib.patches.Wedge object at 0x0000015D7E3C8390>,
<matplotlib.patches.Wedge object at 0x0000015D7E3C8828>],
[Text(1.068035996798755, 0.26324724033138536, 'a'),
Text(-0.13259039153561533, 1.0919797562557798, 'b'),
Text(-0.8233617520668647, -0.7294350041185184, 'c'),
Text(0.8233619228034269, -0.7294348113967717, 'd')])
([<matplotlib.patches.Wedge object at 0x0000015D7E40D240>,
<matplotlib.patches.Wedge object at 0x0000015D7E40D9B0>,
<matplotlib.patches.Wedge object at 0x0000015D7E41B0F0>,
<matplotlib.patches.Wedge object at 0x0000015D7E41B7F0>],
[Text(1.068035996798755, 0.26324724033138536, ''),
Text(-0.13259039153561533, 1.0919797562557798, ''),
Text(-0.8233617520668647, -0.7294350041185184, ''),
Text(0.8233619228034269, -0.7294348113967717, '')],
[Text(0.38837672610863816, 0.09572626921141286, '7.7%'),
Text(-0.04821468783113285, 0.3970835477293745, '38.5%'),
Text(-0.2994042734788599, -0.26524909240673394, '30.8%'),
Text(0.2994043355648825, -0.26524902232609876, '23.1%')])
import matplotlib.pyplot as plt
from pprint import pprint
plt.rcParams['font.family'] = 'SimHei'
x = [1, 5, 4, 3]
labels = ['a', 'b', 'c', 'd']
# 子图1,仅有外标签,无内标签,返回值为2元组,即:
# patches:饼块对象matplotlib.patches.Wedge列表。
# texts: 饼块外标签文本对象列表。
plt.subplot(121)
a = plt.pie(x, labels=labels)
pprint(a)
plt.title('无内标签返回值为2元组')
# 子图2,仅有内标签,无外标签,返回值为3元组,即:
# patches:饼块对象matplotlib.patches.Wedge列表。
# texts: 饼块外标签文本对象列表,由于没有设置外标签,文本均为空。
# autotexts:饼块内标签文本对象列表。
plt.subplot(122)
b = plt.pie(x, autopct='%1.1f%%', pctdistance=0.4)
plt.title('有内标签返回值为3元组')
pprint(b)
plt.show()