Matplotlib 饼状图

Matplotlib 饼状图函数

在 Matplotlib 中,我们可以使用 pie() 函数来绘制一个饼状图。饼状图,也叫做 “饼图”。饼状图有点特殊,它是没有坐标的,因为它的作用是:展示各个部分在总和中的比例

语法:

plt.pie(x)

说明:

x 是一个必选参数,它用于饼状图的数据部分。

示例 1:基本饼状图

import matplotlib.pyplot as plt

# 绘图
x= [8, 4, 6, 10]    # 各部分的值
plt.pie(x)          # 绘制饼状图

# 显示
plt.show()

运行之后,效果如下图所示。

Matplotlib绘制饼状图

Matplotlib 饼状图样式

为了让饼状图更加的美观,pie() 函数还提供了很多用于定义样式的参数,常用的如下表所示。

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()

运行之后,效果如下图所示。

Matplotlib为饼状图添加标题和百分比

分析:

参数 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()

运行之后,效果如下图所示。

Matplotlib自定义饼状图颜色

分析:

如果觉得饼状图默认的颜色不够美观,那么我们可以使用 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()

运行之后,效果如下图所示。

Matplotlib拉出饼状图的一部分

分析:

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

Matplotlib拉出饼状图第2部分

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

Matplotlib拉出饼状图更大距离

示例 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 圆环图

圆环图,也叫做 “环形图”。在 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()

运行之后,效果如下图所示。

Matplotlib绘制圆环图

分析:

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

上一篇: Matplotlib 直方图

下一篇: Matplotlib 箱线图

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号