Matplotlib 饼状图函数
在 Matplotlib 中,我们可以使用 pie() 函数来绘制一个饼状图。饼状图,也叫做 “饼图”。饼状图有点特殊,它是没有坐标的,因为它的作用是:展示各个部分在总和中的比例。
语法:
plt.pie(x)说明:
x 是一个必选参数,它用于饼状图的数据部分。
示例 1:基本饼状图
import matplotlib.pyplot as plt
# 绘图
x= [8, 4, 6, 10] # 各部分的值
plt.pie(x) # 绘制饼状图
# 显示
plt.show()运行之后,效果如下图所示。

Matplotlib 饼状图样式
为了让饼状图更加的美观,pie() 函数还提供了很多用于定义样式的参数,常用的如下表所示。
| 参数 | 说明 |
|---|---|
| labels | 各部分的标题(列表) |
| colors | 各部分的颜色(列表) |
| autopct | 显示百分比 |
| explode | 是否拉出某部分(元组) |
| shadow | 是否显示阴影(元组) |
示例 2:添加标题和百分比
import matplotlib.pyplot as plt
# 设置
plt.rcParams['font.family'] = ['SimHei', 'PingFang SC']
plt.rcParams['axes.unicode_minus'] = False
# 各部分的数据(单位:亿美元)
x = [8.9, 4.1, 12.1, 8.5, 11.5]
# 各部分的标题
movies = ['蜘蛛侠', '蝙蝠侠', '钢铁侠', '毒液', '海王']
# 绘制饼状图
plt.pie(x,
labels = movies,
autopct = '%1.1f%%'
)
plt.title('电影票房占比')
# 显示
plt.show()运行之后,效果如下图所示。

分析:
参数 autopct 表示项目百分比的格式,语法为:'%格式%%'。比如 '%1.1f%%' 表示整数占 1 位,小数占 1 位。而 '%2.1f%%' 表示整数占 2 位,小数占 1 位。
示例 3:改变颜色
import matplotlib.pyplot as plt
# 设置
plt.rcParams['font.family'] = ['SimHei', 'PingFang SC']
plt.rcParams['axes.unicode_minus'] = False
# 各部分的数据(单位:亿美元)
x = [8.9, 4.1, 12.1, 8.5, 11.5]
# 各部分的标题
movies = ['蜘蛛侠', '蝙蝠侠', '钢铁侠', '毒液', '海王']
# 绘制饼状图
plt.pie(x,
labels = movies,
autopct = '%1.1f%%',
colors=['lightskyblue', 'orangered', 'purple', 'hotpink', 'yellow']
)
plt.title('电影票房占比')
# 显示
plt.show()运行之后,效果如下图所示。

分析:
如果觉得饼状图默认的颜色不够美观,那么我们可以使用 colors 这个参数来定义每一个扇形的颜色。
示例 4:拉出某部分
import matplotlib.pyplot as plt
# 设置
plt.rcParams['font.family'] = ['SimHei', 'PingFang SC']
plt.rcParams['axes.unicode_minus'] = False
# 各部分的数据(单位:亿美元)
x = [8.9, 4.1, 12.1, 8.5, 11.5]
# 各部分的标题
movies = ['蜘蛛侠', '蝙蝠侠', '钢铁侠', '毒液', '海王']
# 绘制饼状图
plt.pie(x,
labels = movies,
autopct = '%1.1f%%',
explode = (0.1, 0, 0, 0, 0)
)
plt.title('电影票房占比')
# 显示
plt.show()运行之后,效果如下图所示。

分析:
explode=(0.1, 0, 0, 0, 0) 表示将第 1 部分拉出来。如果想要将第 2 部分拉出来,我们可以这样来写:explode=(0, 0.1, 0, 0, 0),此时效果如下图所示。

如果想要改变拉出的距离,我们只需要改变小数部分的数值就可以了。比如我们将 explode=(0.1, 0, 0, 0, 0) 改为 explode=(0.5, 0, 0, 0, 0) 之后,此时效果如下图所示。

示例 5:添加阴影效果
import matplotlib.pyplot as plt
# 设置
plt.rcParams['font.family'] = ['SimHei', 'PingFang SC']
plt.rcParams['axes.unicode_minus'] = False
# 各部分的数据(单位:亿美元)
x = [8.9, 4.1, 12.1, 8.5, 11.5]
# 各部分的标题
movies = ['蜘蛛侠', '蝙蝠侠', '钢铁侠', '毒液', '海王']
# 绘制饼状图
plt.pie(x,
labels = movies,
autopct = '%1.1f%%',
explode = (0.1, 0, 0, 0, 0),
shadow=True
)
plt.title('电影票房占比')
# 显示
plt.show()运行之后,效果如下图所示。

分析:
最后要说明一下,虽然饼状图的展示效果不错,但它仅适用于少量数据的呈现。对于大量数据,此时就不适合使用饼状图。因为如果将饼状图分块太多,那么比例太小的数据就会看不清楚。
Matplotlib 圆环图
圆环图,也叫做 “环形图”。在 Matplotlib 中,我们可以使用 pie() 函数的 radius 和 wedgeprops 这 2 个参数配合使用来实现一个圆环图。
示例 6:绘制圆环图
import matplotlib.pyplot as plt
# 设置
plt.rcParams['font.family'] = ['SimHei', 'PingFang SC']
plt.rcParams['axes.unicode_minus'] = False
# 各部分的数据(单位:亿美元)
x = [8.9, 4.1, 12.1, 8.5, 11.5]
# 各部分的标题
movies = ['蜘蛛侠', '蝙蝠侠', '钢铁侠', '毒液', '海王']
# 绘制饼状图
plt.pie(x,
labels = movies,
autopct = '%1.1f%%',
radius=1.0,
wedgeprops={'width': 0.6}
)
plt.title('电影票房占比')
# 显示
plt.show()运行之后,效果如下图所示。

分析:
radius=1.0 用于定义外圆半径,其值为默认的 100%。wedgeprops={'width':0.6} 用于定义楔形宽度(也就是内圆半径),其值为默认的 60%。
