Matplotlib pie()创建饼形图(非常详细)
饼形图主要用于展示各部分数据占数据总和的比例。如需创建饼形图,可以使用 pyplot 模块中的 pie() 函数或 Axes 对象的 pie() 方法。
下面的代码是使用 Axes 对象的 pie() 方法创建下图的饼形图。

图 1 饼形图
下面的代码仍然创建与图 1 的饼形图,但是为其中的每个扇区添加了名称和百分比值,如下图所示:

图 2 为饼形图添加标签和百分比值
此处为 autopct 参数设置的值用于指定比值的格式,字符串 %.2f%% 中的 f 表示浮点数类型,“.2”表示将比值保留两位小数。
下面的代码将表示颜色值的 6 个字符以字符串的形式传递给 Python 内置的 list() 函数,该函数将创建由这些字母组成的列表,然后将该列表设置为 colors 参数的值,即可为饼形图的各个扇区设置由这些字符指定的颜色:

图 2 改变饼形图各个扇区的颜色
下面的代码是将饼形图的第 2 个和第 5 个扇区分离出来:

图 3 分裂饼形图
下面的代码是将饼形图的半径设置为原始大小的 1.5 倍:

图 4 增大饼形图
下面的代码是将 radius 参数设置为小于 1 的数字,将使饼形图变小:

图 5 减小饼形图

图 6 让饼形图更有立体感
除了可以将 shadow 参数设置为 True 或 False 之外,还可以将其值设置为一个字典,在字典中使用 shade 键控制饼形图下方阴影部分中的黑色程度。
下面的代码是将 shade 键的值设置为 0.2,极大地减少了阴影部分中的黑色:

图 7 减少阴影部分中的黑色
将 shadow 参数的值设置为字典时,也可以使用 Python 内置的 dict() 函数,这样无须输入字典特有的花括号以及键和值之间的冒号。可以将上面代码中的 shadow 参数部分改为以下形式:
创建基本饼形图
pie() 函数或 pie() 方法的第一个参数 x 表示要创建饼形图的数据,创建饼形图时必须指定该参数,其他参数都是关键字参数。下面的代码是使用 Axes 对象的 pie() 方法创建下图的饼形图。

图 1 饼形图
import matplotlib.pyplot as plt x = [2, 9, 6, 3, 5, 8] fig, ax = plt.subplots() ax.pie(x) plt.show()
为饼形图添加标签和百分比值
为了使饼形图的含义清晰,通常需要为饼形图的每个扇区添加标签和百分比值。为此,需要为 pie() 函数或 pie() 方法指定 labels 和 autopct 两个参数:- labels 参数用于为每个扇区添加标签,标签用于说明每个扇区的含义;
- autopct 参数用于为每个扇区添加百分比值,百分比值是每个扇区对应的数据占所有扇区数据总和的比值。
下面的代码仍然创建与图 1 的饼形图,但是为其中的每个扇区添加了名称和百分比值,如下图所示:

图 2 为饼形图添加标签和百分比值
此处为 autopct 参数设置的值用于指定比值的格式,字符串 %.2f%% 中的 f 表示浮点数类型,“.2”表示将比值保留两位小数。
import matplotlib as mpl import matplotlib.pyplot as plt mpl.rcParams['font.sans-serif'] = 'SimSun' x = [2, 9, 6, 3, 5, 8] name = ['产品 1', '产品 2', '产品 3', '产品 4', '产品 5', '产品 6'] fig, ax = plt.subplots() ax.pie(x, labels=name, autopct='%.2f%%') plt.show()
改变饼形图各个扇区的颜色
在 pie() 函数或 pie() 方法中,可以通过指定 colors 参数来改变饼形图各个扇区的颜色。下面的代码将表示颜色值的 6 个字符以字符串的形式传递给 Python 内置的 list() 函数,该函数将创建由这些字母组成的列表,然后将该列表设置为 colors 参数的值,即可为饼形图的各个扇区设置由这些字符指定的颜色:
import matplotlib as mpl import matplotlib.pyplot as plt mpl.rcParams['font.sans-serif'] = 'SimSun' x = [2, 9, 6, 3, 5, 8] name = ['产品 1', '产品 2', '产品 3', '产品 4', '产品 5', '产品 6'] color = list('rgbcmy') fig, ax = plt.subplots() ax.pie(x, labels=name, autopct='%.2f%%', colors=color) plt.show()如下图所示:

图 2 改变饼形图各个扇区的颜色
创建分裂饼形图
分裂饼形图是指将饼形图的一个或多个扇区从饼形图中分离出来。如需创建分裂饼形图,可以在 pie() 函数或 pie() 方法中指定 explode 参数。该参数的值是一个由多个元素组成的元组或列表,这些元素与饼形图的各个扇区一一对应。将希望分离出来的扇区对应的值设置为一个大于 0 的数字,即可将该扇区从饼形图中分离出来。下面的代码是将饼形图的第 2 个和第 5 个扇区分离出来:
import matplotlib as mpl import matplotlib.pyplot as plt mpl.rcParams['font.sans-serif'] = 'SimSun' x = [2, 9, 6, 3, 5, 8] name = ['产品 1', '产品 2', '产品 3', '产品 4', '产品 5', '产品 6'] explode = [0, 0.2, 0, 0, 0.2, 0] fig, ax = plt.subplots() ax.pie(x, explode=explode, labels=name, autopct='%.2f%%') plt.show()如下图所示:

图 3 分裂饼形图
调整饼形图的大小
如需调整饼形图的大小,可以为 pie() 函数或 pie() 方法指定 radius 参数,该参数用于设置饼形图的半径,将其值设置为一个大于 0 的数字。如果数字大于 1,则表示增大饼形图;如果数字小于 1,则表示减小饼形图。下面的代码是将饼形图的半径设置为原始大小的 1.5 倍:
import matplotlib as mpl import matplotlib.pyplot as plt mpl.rcParams['font.sans-serif'] = 'SimSun' x = [2, 9, 6, 3, 5, 8] name = ['产品 1', '产品 2', '产品 3', '产品 4', '产品 5', '产品 6'] fig, ax = plt.subplots() ax.pie(x, labels=name, autopct='%.2f%%', radius=1.5) plt.show()如下图所示:

图 4 增大饼形图
下面的代码是将 radius 参数设置为小于 1 的数字,将使饼形图变小:
import matplotlib as mpl import matplotlib.pyplot as plt mpl.rcParams['font.sans-serif'] = 'SimSun' x = [2, 9, 6, 3, 5, 8] name = ['产品 1', '产品 2', '产品 3', '产品 4', '产品 5', '产品 6'] fig, ax = plt.subplots() ax.pie(x, labels=name, autopct='%.2f%%', radius=0.6) plt.show()如下图所示:

图 5 减小饼形图
让饼形图更有立体感
在 pie() 函数或 pie() 方法中将 shadow 参数设置为 True,将在饼形图的下方添加阴影效果,使饼形图看起来更有立体感:import matplotlib as mpl import matplotlib.pyplot as plt mpl.rcParams['font.sans-serif'] = 'SimSun' x = [2, 9, 6, 3, 5, 8] name = ['产品 1', '产品 2', '产品 3', '产品 4', '产品 5', '产品 6'] fig, ax = plt.subplots() ax.pie(x, labels=name, autopct='%.2f%%', shadow=True, radius=1.5) plt.show()如下图所示:

图 6 让饼形图更有立体感
除了可以将 shadow 参数设置为 True 或 False 之外,还可以将其值设置为一个字典,在字典中使用 shade 键控制饼形图下方阴影部分中的黑色程度。
下面的代码是将 shade 键的值设置为 0.2,极大地减少了阴影部分中的黑色:
import matplotlib as mpl import matplotlib.pyplot as plt mpl.rcParams['font.sans-serif'] = 'SimSun' x = [2, 9, 6, 3, 5, 8] name = ['产品 1', '产品 2', '产品 3', '产品 4', '产品 5', '产品 6'] fig, ax = plt.subplots() ax.pie(x, labels=name, autopct='%.2f%%', shadow={'shade': 0.2}, radius=1.5) plt.show()如下图所示:

图 7 减少阴影部分中的黑色
将 shadow 参数的值设置为字典时,也可以使用 Python 内置的 dict() 函数,这样无须输入字典特有的花括号以及键和值之间的冒号。可以将上面代码中的 shadow 参数部分改为以下形式:
shadow=dict(shade=0.2)