# Python 数据分析三剑客之 Matplotlib（七）：饼状图的绘制

TRHX

2020-04-24

Python 数据分析 / Matplotlib

字数统计:

2,347字

阅读时长≈

10分

Matplotlib 系列文章：

- Python 数据分析三剑客之 Matplotlib（一）：初识 Matplotlib 与其 matplotibrc 配置文件
- Python 数据分析三剑客之 Matplotlib（二）：文本描述 / 中文支持 / 画布 / 网格等基本图像属性
- Python 数据分析三剑客之 Matplotlib（三）：图例 / LaTeX / 刻度 / 子图 / 补丁等基本图像属性
- Python 数据分析三剑客之 Matplotlib（四）：线性图的绘制
- Python 数据分析三剑客之 Matplotlib（五）：散点图的绘制
- Python 数据分析三剑客之 Matplotlib（六）：直方图 / 柱状图 / 条形图的绘制
- Python 数据分析三剑客之 Matplotlib（七）：饼状图的绘制
- Python 数据分析三剑客之 Matplotlib（八）：等高线 / 等值线图的绘制
- Python 数据分析三剑客之 Matplotlib（九）：极区图 / 极坐标图 / 雷达图的绘制
- Python 数据分析三剑客之 Matplotlib（十）：3D 图的绘制
- Python 数据分析三剑客之 Matplotlib（十一）：最热门最常用的 50 个图表【译文】

专栏：

【NumPy 专栏】【Pandas 专栏】【Matplotlib 专栏】

推荐学习资料与网站：

【NumPy 中文网】【Pandas 中文网】【Matplotlib 中文网】【NumPy、Matplotlib、Pandas 速查表】

    1
    2
    3
    4
    5

    这里是一段防爬虫文本，请读者忽略。
    本文原创首发于 CSDN，作者 TRHX。
    博客首页：https://itrhx.blog.csdn.net/
    本文链接：https://itrhx.blog.csdn.net/article/details/106025845
    未经授权，禁止转载！恶意转载，后果自负！尊重原创，远离剽窃！

## 【1x00】方法描述

`matplotlib.pyplot.pie()` 方法用于绘制饼状图。

基本语法：

    1
    2
    3
    4
    5
    6
    7

    matplotlib.pyplot.pie(
    		x[, explode=None, labels=None, colors=None,
    		autopct=None, pctdistance=0.6, shadow=False,
    		labeldistance=1.1, startangle=None, radius=None,
    		counterclock=True, wedgeprops=None, textprops=None,
    		center=(0, 0), frame=False, rotatelabels=False, \*, data=None]
    		)

参数 | 描述
--- | ---
x | 每个扇形块的大小，数组形式，大小单位是比例
explode | 指定对应扇形块脱离饼图的半径大小，数组形式，其中元素个数应该是 len(x)
labels | 每个扇形块上的文本标签，列表形式
labeldistance | 每个扇形块上的文本标签与扇形中心的距离，float 类型，默认 1.1
colors | 每个扇形块对应的颜色，数组形式
autopct | 用于计算每个扇形块所占比例，字符串或者函数类型 例如：`autopct='%1.1f%%'` 表示浮点数，保留一位小数，并添加百分比符号
pctdistance | 每个扇形块的中心与 autopct 生成的文本之间的距离，float 类型，默认 0.6
shadow | 是否为扇形添加阴影效果
startangle | 将饼图按照逆时针旋转指定的角度，float 类型
radius | 饼图的半径，如果是 None，则将被设置为 1，float 类型
counterclock | 是否按照逆时针对扇形图进行排列，bool 类型，默认 True
wedgeprops | 传递给绘制每个扇形图对象的参数，字典形式，参数值参见 Wedge 例如：`wedgeprops = {'linewidth': 3}` 设置扇形边框线宽度为 3
textprops | 传递给文本对象的参数，字典形式 例如：`textprops={'color': 'r', 'fontsize': 15}` 设置文字为红色，大小为15
center | 饼图圆心在画布上是坐标，默认 (0, 0)
frame | 是否显示 x, y 坐标轴外框，默认 False
rotatelabels | 是否按照角度进行调整每块饼的 label 文本标签，默认 False

## 【2x00】简单示例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13

    import matplotlib.pyplot as plt

    plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']

    x = [10, 30, 45, 15]
    labels = ['Java', 'Golang', 'Python', 'C++']
    colors = ['red', 'yellow', 'blue', 'green']

    # 指定4个扇区所占比例以及扇区的颜色，扇区文本标签距离扇区中心1.1
    plt.pie(x, labels=labels, colors=colors, labeldistance=1.1)
    plt.title('饼状图简单示例')

    plt.show()

<fancybox>
</fancybox>

## 【3x00】按角度调整扇形标签

`rotatelabels` 属性可以设置是否按照角度调整每块饼的 label（标签）显示方式。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13

    import matplotlib.pyplot as plt

    plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']

    x = [10, 30, 45, 15]
    labels = ['Java', 'Go', 'Python', 'C++']
    colors = ['red', 'yellow', 'blue', 'green']

    # 指定4个扇区所占比例以及扇区的颜色，扇区文本标签距离扇区中心1.1，按角度调整 labels
    plt.pie(x, labels=labels, colors=colors, labeldistance=1.1, rotatelabels=True)
    plt.title('饼状图按角度调整 labels 示例')

    plt.show()

<fancybox>
</fancybox>

## 【4x00】显示图例

与前面文章中绘制线性图、散点图、条形图一样，调用 `matplotlib.pyplot.legend()` 方法可绘制图例，该方法的参数解释参见前文《Python 数据分析三剑客之 Matplotlib（三）：图例 / LaTeX / 刻度 / 子图 / 补丁等基本图像属性》

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13

    import matplotlib.pyplot as plt

    plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']

    x = [10, 30, 45, 15]
    labels = ['Java', 'Go', 'Python', 'C++']
    colors = ['red', 'yellow', 'blue', 'green']

    plt.pie(x, labels=labels, colors=colors, labeldistance=1.1)
    plt.title('饼状图显示图例示例')
    plt.legend(bbox_to_anchor=(1, 1))

    plt.show()

<fancybox>
</fancybox>

    1
    2
    3
    4
    5

    这里是一段防爬虫文本，请读者忽略。
    本文原创首发于 CSDN，作者 TRHX。
    博客首页：https://itrhx.blog.csdn.net/
    本文链接：https://itrhx.blog.csdn.net/article/details/106025845
    未经授权，禁止转载！恶意转载，后果自负！尊重原创，远离剽窃！

## 【5x00】突出显示扇形块

`explode` 参数可以实现突出显示某一块扇区，接收数组形式的参数，这个数组中的元素个数应该是 len(x)，即和扇区块的数量相同。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14

    import matplotlib.pyplot as plt

    plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']

    x = [10, 30, 45, 15]
    labels = ['Java', 'Golang', 'Python', 'C++']
    colors = ['red', 'yellow', 'blue', 'green']

    # 指定第一个扇区块脱离饼图的半径大小为0.3，其它扇区不脱离
    plt.pie(x, labels=labels, colors=colors, labeldistance=1.1, explode=[0.3, 0, 0, 0])
    plt.title('饼状图突出显示扇形块示例')
    plt.legend(bbox_to_anchor=(1, 1))

    plt.show()

<fancybox>
</fancybox>

## 【6x00】显示各扇区所占百分比

`autopct` 参数可用于计算每个扇形块所占比例，接收字符串或者函数类型，例如：`autopct='%1.1f%%'` 表示浮点数，保留一位小数，并添加百分比符号。`pctdistance` 参数用于调整每个扇形块的中心与 `autopct` 生成的文本之间的距离，float 类型，默认 0.6。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21

    import matplotlib.pyplot as plt

    plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']

    x = [10, 30, 45, 15]
    labels = ['Java', 'Golang', 'Python', 'C++']
    colors = ['red', 'yellow', 'blue', 'green']

    plt.pie(
        x,                        # 每个扇形块所占比例
        labels=labels,            # 扇形块文本标签
        colors=colors,            # 扇形块颜色
        labeldistance=1.1,        # 扇形块标签距离中心的距离
        explode=[0.3, 0, 0, 0],   # 第一个扇形块突出显示
        autopct='%1.1f%%',        # 显示百分比，保留一位小数
        pctdistance=0.5           # 百分比文本距离饼状图中心的距离
    )
    plt.title('饼状图显示各扇区所占百分比示例')
    plt.legend(bbox_to_anchor=(1, 1))  # 显示图例

    plt.show()

<fancybox>
</fancybox>

## 【7x00】旋转饼状图

`startangle` 参数可以选择饼状图，改变饼状图放置的角度。注意是按照逆时针旋转。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22

    import matplotlib.pyplot as plt

    plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']

    x = [10, 30, 45, 15]
    labels = ['Java', 'Golang', 'Python', 'C++']
    colors = ['red', 'yellow', 'blue', 'green']

    plt.pie(
        x,                        # 每个扇形块所占比例
        labels=labels,            # 扇形块文本标签
        colors=colors,            # 扇形块颜色
        labeldistance=1.1,        # 扇形块标签距离中心的距离
        explode=[0.3, 0, 0, 0],   # 第一个扇形块突出显示
        autopct='%1.1f%%',        # 显示百分比，保留一位小数
        pctdistance=0.5,          # 百分比文本距离饼状图中心的距离
        startangle=-90            # 逆时针旋转-90°，即顺时针旋转90°
    )
    plt.title('饼状图旋转角度示例')
    plt.legend(bbox_to_anchor=(1, 1))  # 显示图例

    plt.show()

<fancybox>
</fancybox>

## 【8x00】自定义每个扇形和文字属性

`wedgeprops` 参数以字典形式为每个扇形添加自定义属性，例如：`wedgeprops = {'linewidth': 3}` 设置扇形边框线宽度为 3，更多其他参数值参见 Wedge；

`textprops` 参数同样以字典形式为文本对象添加自定义属性，例如：`textprops={'color': 'r', 'fontsize': 15}` 设置文字为红色，大小为15，更多其他参数值参见 Text。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32

    import matplotlib.pyplot as plt

    plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']

    x = [10, 30, 45, 15]
    labels = ['Java', 'Golang', 'Python', 'C++']
    colors = ['red', 'yellow', 'blue', 'green']

    plt.pie(
        x,                           # 每个扇形块所占比例
        labels=labels,               # 扇形块文本标签
        colors=colors,               # 扇形块颜色
        labeldistance=1.1,           # 扇形块标签距离中心的距离
        explode=[0.3, 0, 0, 0],      # 第一个扇形块突出显示
        autopct='%1.1f%%',           # 显示百分比，保留一位小数
        pctdistance=0.6,             # 百分比文本距离饼状图中心的距离
        shadow=True,                 # 显示阴影效果
        wedgeprops={                 # 为每个扇形添加属性
            'width': 0.7,            # 扇形宽度0.7
            'edgecolor': '#98F5FF',  # 扇形边缘线颜色
            'linewidth': 3           # 扇形边缘线宽度
        },
        textprops={                  # 为文字添加属性
            'fontsize': 13,          # 文字大小
            'fontweight': 'bold',    # 文字粗细
            'color': 'k'             # 文字颜色，黑色
        }
    )
    plt.title('饼状图自定义每个扇形和文字属性示例', fontweight='bold')
    plt.legend(bbox_to_anchor=(1, 1), borderpad=0.6)  # 显示图例

    plt.show()

<fancybox>
</fancybox>

    1
    2
    3
    4
    5

    这里是一段防爬虫文本，请读者忽略。
    本文原创首发于 CSDN，作者 TRHX。
    博客首页：https://itrhx.blog.csdn.net/
    本文链接：https://itrhx.blog.csdn.net/article/details/106025845
    未经授权，禁止转载！恶意转载，后果自负！尊重原创，远离剽窃！

您的喜欢是作者写作最大的动力！❤️

- PayPal
- AliPay
- WeChatPay
- QQPay

Donate

最后更新于 2020年8月6日

Matplotlib

饼状图

###### 上一页

#### Python 数据分析三剑客之 Matplotlib（八）：等高线/等值线图的绘制

###### Matplotlib 等高线图 等值线图

###### 下一页

#### Python 数据分析三剑客之 Matplotlib（六）：直方图/柱状图/条形图的绘制

###### Matplotlib 直方图 柱状图 条形图

#### 评论

## ๑۩ﺴ TRHX ﺴ۩๑

本文目录
欢迎光临

Hexo QQ 交流群 Telegram 交流群

CSDN 内容合伙人

文章分类

- BLOG
  (4)
- CDN
  (1)
- Hexo
  (9)
- Java
  (1)
- Linux
  (2)
- Markdown
  (2)
- Python 数据分析
  (27)
- Matplotlib
  (11)
- NumPy
  (6)
- Pandas
  (10)
- Python3 学习笔记
  (41)
- 基础学习
  (9)
- 学习经验
  (4)
- 爬虫学习
  (18)
- 爬虫实战
  (10)
- VPS
  (1)
- WEB前端
  (2)
- 图床
  (1)

热门标签
12306 3D图 58同城 Ajax BLOG Beautiful Soup CDN Coding Pages DataFrame Deepin Elicpse GitHub Pages Github Github Pages GroupBy HTTPS Hexo ICP备案 IO操作 Index JDBC JS 预加载 LaTeX Markdown Material X Matplotlib MongoDB MySQL NumPy PEP8 Pandas PicGo Pygame Python Redis SEO SQL Server 2012 SSR Selenium Series Ubuntu User-Agent VMware VPS XPath if语句 input()函数 instant.page jsDelivr lxml matplotibrc pyspider requests spfk urllib while循环 主题个性化 代理 位运算 公安备案 函数 函数应用 分割 切片 列表 判断函数 前程无忧 变量 合并数据集 哔哩哔哩 图例 图床 图形验证码 垃圾 备份 子图 字典 字符串函数 安居客 层级索引 年终总结 广播 异常 技巧 拼接 排序 排序函数 操作列表 散点图 数学函数 数据分裂 数据可视化 数据合并 数据替换 数据类型 数据读写 数据重塑 数组 文件 文件储存 无界面浏览器 时间序列 映射 条件函数 条形图 极区图 极坐标图 柱状图 模块 正则表达式 滑动验证码 点触验证码 爬虫 猫眼电影 瓜子二手车 画布 直方图 矩阵 等值线图 等高线图 算术函数 算术运算 类 索引 线性代数 线性图 统计函数 统计描述 统计计算 继承 编辑器 缺失值 网格 肺炎疫情 虎扑论坛 补丁 豆瓣电影 迭代 雷达图 饼状图
最近在听