Matplotlib 饼图

饼图(Pie Chart)是一种常用的数据可视化图形,用来展示各类别在总体中所占的比例。

我们可以使用 pyplot 中的 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)[source]

参数说明:

  • x :浮点型数组或列表,用于绘制饼图的数据,表示每个扇形的面积。

  • explode :数组,表示各个扇形之间的间隔,默认值为0。

  • labels :列表,各个扇形的标签,默认值为 None。

  • colors :数组,表示各个扇形的颜色,默认值为 None。

  • autopct :设置饼图内各个扇形百分比显示格式, %d%% 整数百分比, %0.1f 一位小数, %0.1f%% 一位小数百分比, %0.2f%% 两位小数百分比。

  • labeldistance :标签标记的绘制位置,相对于半径的比例,默认值为 1.1,如 <1 则绘制在饼图内侧。

  • pctdistance: :类似于 labeldistance,指定 autopct 的位置刻度,默认值为 0.6。

  • shadow: :布尔值 True 或 False,设置饼图的阴影,默认为 False,不设置阴影。

  • radius: :设置饼图的半径,默认为 1。

  • startangle: :用于指定饼图的起始角度,默认为从 x 轴正方向逆时针画起,如设定 =90 则从 y 轴正方向画起。

  • counterclock :布尔值,用于指定是否逆时针绘制扇形,默认为 True,即逆时针绘制,False 为顺时针。

  • wedgeprops :字典类型,默认值 None。用于指定扇形的属性,比如边框线颜色、边框线宽度等。例如:wedgeprops={'linewidth':5} 设置 wedge 线宽为5。

  • textprops :字典类型,用于指定文本标签的属性,比如字体大小、字体颜色等,默认值为 None。

  • center :浮点类型的列表,用于指定饼图的中心位置,默认值:(0,0)。

  • frame :布尔类型,用于指定是否绘制饼图的边框,默认值:False。如果是 True,绘制带有表的轴框架。

  • rotatelabels :布尔类型,用于指定是否旋转文本标签,默认为 False。如果为 True,旋转每个 label 到指定的角度。
  • data :用于指定数据。如果设置了 data 参数,则可以直接使用数据框中的列作为 x、labels 等参数的值,无需再次传递。

除此之外,pie() 函数还可以返回三个参数:

  • wedges :一个包含扇形对象的列表。

  • texts :一个包含文本标签对象的列表。

  • autotexts :一个包含自动生成的文本标签对象的列表。

以下实例我们简单实用 pie() 来创建一个饼图:

实例

import matplotlib. pyplot as plt
import numpy as np

y = np. array ( [ 35 , 25 , 25 , 15 ] )

plt. pie ( y )
plt. show ( )

显示结果如下:

设置饼图各个扇形的标签与颜色:

实例

import matplotlib. pyplot as plt
import numpy as np

y = np. array ( [ 35 , 25 , 25 , 15 ] )

plt. pie ( y ,
        labels = [ 'A' , 'B' , 'C' , 'D' ] , # 设置饼图标签
        colors = [ "#d5695d" , "#5d8ca8" , "#65a479" , "#a564c9" ] , # 设置饼图颜色
        )
plt. title ( "yssmx Pie Test" ) # 设置标题
plt. show ( )

显示结果如下:

突出显示第二个扇形,并格式化输出百分比:

实例

import matplotlib. pyplot as plt

# 数据
sizes = [ 15 , 30 , 45 , 10 ]

# 饼图的标签
labels = [ 'A' , 'B' , 'C' , 'D' ]

# 饼图的颜色
colors = [ 'yellowgreen' , 'gold' , 'lightskyblue' , 'lightcoral' ]

# 突出显示第二个扇形
explode = ( , 0.1 , , )

# 绘制饼图
plt. pie ( sizes , explode = explode , labels = labels , colors = colors ,
        autopct = '%1.1f%%' , shadow = True , startangle = 90 )

# 标题
plt. title ( "yssmx Pie Test" )

# 显示图形
plt. show ( )

我们定义了一个包含 4 个元素的列表 sizes,它表示各个类别在总体中所占的比例。然后,我们定义了一个包含 4 个元素的列表 labels,它表示各个类别的标签。接下来,我们定义了一个包含 4 个元素的列表 colors,它表示每个类别的颜色。然后,我们定义了一个包含 4 个元素的元组 explode,它用来指定是否突出某个扇形。接着,我们调用 plt.pie 函数来绘制饼图,其中传入了上述参数。最后,我们添加了一个标题,并调用 plt.show() 来显示图形。

显示结果如下:

实例

import matplotlib. pyplot as plt
import numpy as np

y = np. array ( [ 35 , 25 , 25 , 15 ] )

plt. pie ( y ,
        labels = [ 'A' , 'B' , 'C' , 'D' ] , # 设置饼图标签
        colors = [ "#d5695d" , "#5d8ca8" , "#65a479" , "#a564c9" ] , # 设置饼图颜色
        explode = ( , 0.2 , , ) , # 第二部分突出显示,值越大,距离中心越远
        autopct = '%.2f%%' , # 格式化输出百分比
        )
plt. title ( "yssmx Pie Test" )
plt. show ( )

注意: 默认情况下,第一个扇形的绘制是从 x 轴开始并逆时针移动: