100天精通Python(可视化篇)——第81天:matplotlib绘制不同种类炫酷饼图参数说明+代码实战(自定义、百分比、多个子图、圆环、嵌套饼图)

文章目录

  • 专栏导读
  • 0. 前言
  • 1. 参数说明
  • 2. 普通饼图
  • 3. 百分比饼图
  • 4. 突出某一块的饼图
  • 5. 自定义颜色的饼图
  • 6. 多个子图
  • 7. 圆环饼图
  • 8. 圆环分离饼图
  • 9. 饼图+圆环图组合
  • 10. 多层圆环饼图

专栏导读

🔥🔥本文已收录于《100天精通Python从入门到就业》:本专栏专门针对零基础和需要进阶提升的同学所准备的一套完整教学,从0到100的不断进阶深入,后续还有实战项目,轻松应对面试,专栏订阅地址:https://blog.csdn.net/yuan2019035055/category_11466020.html

  • 优点订阅限时9.9付费专栏进入千人全栈VIP答疑群,作者优先解答机会(代码指导、远程服务),群里大佬众多可以抱团取暖(大厂内推机会)
  • 专栏福利简历指导、招聘内推、每周送实体书、80G全栈学习视频、300本IT电子书:Python、Java、前端、大数据、数据库、算法、爬虫、数据分析、机器学习、面试题库等等
    在这里插入图片描述
    在这里插入图片描述

0. 前言

饼图是一种常见的统计图表,用来表示每个分类所占比例。它是一种分开圆形,再把它们分成不同大小和形状的片段,表示不同分类处于整体中所占的比例,可以直观地反映变量之间的关系。同时也有扇形图,也即用扇形的面积来模拟数据的大小。

在这里插入图片描述

特点:饼图能有效的反映一个分类下各大小项所占比例,简洁明了,直观易读,甚至可以用颜色表示的更加直观,以达到更加有效的传达信息的目的。

应用场景:饼图常用于客观反应一个统计主体中不同组或不同项的比例,例如采用分类统计某个行业销售情况,社会民众对某种事物的支持程度等,同时应用范围也十分广泛,可以运用于商业,教育,社会,经济等领域。

1. 参数说明

matplotlib通过plt.pie函数绘制饼图,语法格式如下

plt.pie(
    x,  # 饼图每个扇形的大小,可以是数字、列表或数组
    explode=None,  # 每个扇形与中心的距离,可以是数字、列表或数组,例如[0, 0.1, 0, 0]表示第二个扇形与中心的距离为半径的10%
    labels=None,  # 饼图每个扇形的标签,可以是字符串或列表
    colors=None,  # 饼图每个扇形的颜色,可以是字符串、元组或列表
    autopct=None,  # 控制每个扇形内部文本的显示格式,例如"%1.1f%%"表示保留一位小数并添加百分号
    pctdistance=0.6,  # 扇形内部文本与圆心的距离,例如0.6表示距离半径的60%
    shadow=False,  # 是否添加阴影效果
    labeldistance=1.1,  # 扇形标签与圆心的距离,例如1.1表示距离半径的110%
    startangle=None,  # 饼图的起始角度,以度数表示,例如90表示从12点钟方向开始绘制
    radius=None,  # 饼图的半径,例如0.8表示半径为0.8倍的图形
    counterclock=True,  # 是否逆时针绘制饼图
    wedgeprops=None,  # 扇形的属性,例如边框颜色、边框宽度、填充颜色等
    textprops=None,  # 扇形内部文本的属性,例如字体大小、颜色等
    center=(0, 0),  # 饼图的中心坐标,例如(0.5, 0.5)表示中心在图形的正中央
    frame=False,  # 是否添加边框
    rotatelabels=False,  # 是否旋转扇形标签的方向
    normalize=None,  # 是否将大小归一化,例如True表示将大小除以总和并乘以100%
    data=None,  # 饼图数据的来源,可以是字典、DataFrame、Series等
)

参数说明

  • explode:每个扇形与中心的距离,可以是数字、列表或数组,例如[0, 0.1, 0, 0]表示第二个扇形与中心的距离为半径的10%
  • labels:饼图每个扇形的标签,可以是字符串或列表
  • colors:饼图每个扇形的颜色,可以是字符串、元组或列表
  • autopct:控制每个扇形内部文本的显示格式,例如"%1.1f%%"表示保留一位小数并添加百分号
  • pctdistance:扇形内部文本与圆心的距离,例如0.6表示距离半径的60%
  • shadow:是否添加阴影效果
  • labeldistance:扇形标签与圆心的距离,例如1.1表示距离半径的110%
  • radius:饼图的半径,例如0.8表示半径为0.8倍的图形
  • counterclock:是否逆时针绘制饼图
  • wedgeprops:扇形的属性,例如边框颜色、边框宽度、填充颜色等
  • textprops:扇形内部文本的属性,例如字体大小、颜色等
  • center:饼图的中心坐标,例如(0.5, 0.5)表示中心在图形的正中央
  • frame:是否添加边框
  • rotatelabels:是否旋转扇形标签的方向
  • normalize:是否将大小归一化,例如True表示将大小除以总和并乘以100%
  • data:饼图数据的来源,可以是字典、DataFrame、Series等

2. 普通饼图

import matplotlib.pyplot as plt

# 数据
labels = ['A', 'B', 'C', 'D']
sizes = [15, 30, 45, 10]

# 绘图
plt.pie(sizes, labels=labels)

# 显示图形
plt.show()

运行结果
在这里插入图片描述

3. 百分比饼图

通过设置autopct='%1.1f%%'参数显示饼图百分比占比:

import matplotlib.pyplot as plt

# 数据
labels = ['A', 'B', 'C', 'D']
sizes = [15, 30, 45, 10]

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

# 添加标题
plt.title('Pie Chart')

# 显示图形
plt.show()

参数说明

  • labels:饼图中每个扇形的标签。
  • sizes:每个扇形的大小,可以是数字、列表或数组。
  • autopct:控制每个扇形内部文本的显示格式,%1.1f%%表示保留一位小数并添加百分号。
  • startangle:饼图的起始角度,以度数表示,例如90表示从12点钟方向开始绘制。

运行结果:

在这里插入图片描述

4. 突出某一块的饼图

import matplotlib.pyplot as plt

# 数据
labels = ['A', 'B', 'C', 'D']
sizes = [15, 30, 45, 10]
explode = (0, 0.1, 0, 0)

# 绘图
plt.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%')

# 显示图形
plt.show()

运行结果:
在这里插入图片描述

5. 自定义颜色的饼图

import matplotlib.pyplot as plt

# 数据
labels = ['A', 'B', 'C', 'D']
sizes = [15, 30, 45, 10]

# 设置颜色
colors = ['yellowgreen', 'gold', 'lightskyblue', 'lightcoral']

# 绘图
explode = (0, 0.1, 0, 0)
plt.pie(sizes, explode=explode, labels=labels, colors=colors,autopct='%1.1f%%', shadow=True, startangle=90)
plt.axis('equal')

# 显示
plt.show()

运行结果:
在这里插入图片描述

6. 多个子图

多个饼图(Multiple Pie chart):将多个饼图组合在一起,方便对比分析。

要绘制多个饼图,我们可以使用subplot()函数在一个图中创建多个子图。下面例子创建了一个2x2的子图,每个子图都是一个饼图。我们可以在每个子图中使用pie()函数来绘制饼图,然后使用set_title()函数为每个子图添加标题。最后,我们使用show()函数显示图形:

import matplotlib.pyplot as plt

# 定义数据
labels = ['A', 'B', 'C', 'D']
sizes1 = [20, 30, 40, 10]
sizes2 = [30, 10, 20, 40]
sizes3 = [50, 20, 10, 20]
sizes4 = [15, 25, 30, 30]

# 创建子图
fig, axs = plt.subplots(2, 2)

# 绘制饼图
axs[0, 0].pie(sizes1, labels=labels, autopct='%1.1f%%')
axs[0, 1].pie(sizes2, labels=labels, autopct='%1.1f%%')
axs[1, 0].pie(sizes3, labels=labels, autopct='%1.1f%%')
axs[1, 1].pie(sizes4, labels=labels, autopct='%1.1f%%')

# 添加标题
axs[0, 0].set_title('Pie chart 1')
axs[0, 1].set_title('Pie chart 2')
axs[1, 0].set_title('Pie chart 3')
axs[1, 1].set_title('Pie chart 4')

# 显示图形
plt.show()

运行结果
在这里插入图片描述

7. 圆环饼图

import matplotlib.pyplot as plt

# 定义数据
labels = ['A', 'B', 'C', 'D']
sizes = [15, 30, 45, 10]
colors = ['#FFC107', '#FF9800', '#FF5722', '#F44336']
explode = (0, 0, 0, 0.1)
inner_radius = 0.5

# 绘制圆环饼图
fig, ax = plt.subplots(figsize=(8, 8))
ax.pie(sizes, explode=explode, labels=labels, colors=colors, autopct='%1.1f%%', startangle=90, counterclock=False, wedgeprops={'linewidth': 1, 'edgecolor': 'white'})
ax.set_title('Circle Donut Chart', fontsize=20)

# 设置内圆半径
centre_circle = plt.Circle((0, 0), inner_radius, color='white', fc='white', linewidth=1.25)
fig.gca().add_artist(centre_circle)

# 显示图形
plt.show()

运行结果
在这里插入图片描述

8. 圆环分离饼图

下面示例代码将绘制一个圆环分离饼图,其中包含四个环形,每个环形的大小和颜色都不同。标签和百分比将添加到每个环形中。圆角线将添加到每个环形中,使其看起来更美观:

import matplotlib.pyplot as plt

# 数据
sizes = [25, 40, 15, 20]  # 环形大小
labels = ['A', 'B', 'C', 'D']  # 标签
colors = ['#ff9999', '#66b3ff', '#99ff99', '#ffcc99']  # 环形颜色
explode = [0.05, 0.05, 0.05, 0.05]  # 突出显示

# 绘制圆角线穿环百分比图
fig, ax = plt.subplots()
ax.axis('equal')  # 设置坐标轴比例相等
wedges, texts, autotexts = ax.pie(sizes, labels=labels, colors=colors, autopct='%1.1f%%', startangle=90, pctdistance=0.85, explode=explode, wedgeprops=dict(width=0.5, edgecolor='w'))

# 添加圆角线
for wedge in wedges:
    wedge.set_linewidth(1)
    wedge.set_edgecolor('w')
    wedge.set_alpha(0.8)
    wedge.set_zorder(1)
    wedge.set_capstyle('round')

# 添加标签和百分比
ax.legend(wedges, labels, loc='center', bbox_to_anchor=(0.5, -0.1))
for text, autotext in zip(texts, autotexts):
    text.set_color('grey')
    autotext.set_color('white')
    autotext.set_fontsize(12)

# 显示图形
plt.show()

运行结果
在这里插入图片描述

9. 饼图+圆环图组合

使用圆环图与饼图制作,圆环图制作外层突出数据,饼图制作为浅色阴影:

import matplotlib.pyplot as plt

# 数据
labels = ['A', 'B', 'C', 'D']
sizes1 = [15, 30, 45, 10]
sizes2 = [10, 20, 30, 40]

# 绘制饼图1
plt.pie(sizes1, labels=labels, autopct='%1.1f%%', startangle=90, radius=1.2, colors=['#ff9999', '#66b3ff', '#99ff99', '#ffcc99'])

# 绘制饼图2
plt.pie(sizes2, radius=1, colors=['#c2c2f0', '#ffb3e6', '#c2f0c2', '#f0d9c2'], startangle=90)

# 添加标题
plt.title('Stacked Pie Chart')

# 显示图形
plt.show()

参数说明

  • labels:饼图中每个扇形的标签。
  • sizes1和sizes2:每个扇形的大小,可以是数字、列表或数组。sizes1表示底层饼图的大小,sizes2表示顶层饼图的大小。
  • autopct:控制每个扇形内部文本的显示格式,%1.1f%%表示保留一位小数并添加百分号。
  • startangle:饼图的起始角度,以度数表示,例如90表示从12点钟方向开始绘制。
  • radius:饼图的半径,例如1.2表示底层饼图的半径为整个图形的1.2倍,1表示顶层饼图的半径为整个图形的1倍。
  • colors:饼图每个扇形的颜色,可以是字符串、元组或列表。本例中使用了自定义颜色。
  • 绘制底层饼图时,只需传入sizes1和radius=1.2参数即可。由于顶层饼图的半径为1,因此底层饼图的半径为1.2时,会自动与顶层饼图重叠。
  • 可以使用startangle参数控制顶层饼图的起始角度,使其与底层饼图重叠时,各个扇形的位置保持一致。
  • 可以使用不同的颜色区分底层饼图和顶层饼图的数据。

运行结果
在这里插入图片描述

10. 多层圆环饼图

下面代码将创建一个多层圆环饼图,其中每层饼图表示不同的数据集,每个扇形表示数据的百分比。图例标签是数据集的标签,半径越大表示该层数据集的权重越高。

import matplotlib.pyplot as plt

# 创建数据
labels = ['A', 'B', 'C', 'D', 'E']
data_1 = [20, 30, 10, 25, 15]
data_2 = [15, 25, 20, 10, 30]
data_3 = [10, 20, 30, 15, 25]

# 计算百分比
total = [sum(x) for x in zip(data_1, data_2, data_3)]
percent_1 = [x/total[i]*100 for i,x in enumerate(data_1)]
percent_2 = [x/total[i]*100 for i,x in enumerate(data_2)]
percent_3 = [x/total[i]*100 for i,x in enumerate(data_3)]

# 绘制饼图
fig, ax = plt.subplots()
ax.pie(percent_1, labels=labels, autopct='%1.1f%%', radius=0.8, wedgeprops=dict(width=0.3, edgecolor='w'))
ax.pie(percent_2, labels=labels, autopct='%1.1f%%', radius=0.6, wedgeprops=dict(width=0.3, edgecolor='w'))
ax.pie(percent_3, labels=labels, autopct='%1.1f%%', radius=0.4, wedgeprops=dict(width=0.3, edgecolor='w'))

# 添加标题
ax.set_title('Multi-layer Stacked Pie Chart')

# 显示图像
plt.show()

运行结果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/3711.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【VScode】远程连接Linux

目录标题1. 安装扩展插件2. 在Linux上操作3. 确定Linux的IP地址4. 远程连接到Linux5. 实现免密码登录使用 VScode 远程编程与调试的时有会用到插件 Remote Development,使用这个插件可以在很多情况下代替 vim 直接远程修改与调试服务器上的代码,同时具备…

超详细讲解C语言文件操作!!

超详细讲解C语言文件操作!!什么是文件文件名文件的打开和关闭文件指针文件的打开和关闭文件的顺序读写文件的随机读写fseekftellrewind文本文件和二进制文件文件读取结束的判定文件缓冲区什么是文件 磁盘上的文件是文件。但是在程序设计中,我…

Python | 蓝桥杯系列文章总结+经典例题重做

欢迎交流学习~~ 专栏: 蓝桥杯Python组刷题日寄 从 4 个月前开始写蓝桥杯系列,到目前为止一共是 19 篇,其中:入门篇 5 篇,简单篇 8 篇,进阶篇 6 篇。 这篇文章主要是为了为先前内容进行总结,并对…

蓝桥杯冲刺 - Lastweek - 你离省一仅剩一步之遥!!!(掌握【DP】冲刺国赛)

文章目录💬前言🎯week3🌲day10-1背包完全背包多重背包多重背包 II分组背包🌲day2数字三角形 - 线性DP1015. 摘花生 - 数字三角形🌲day3最长上升子序列 - 线性DP1017. 怪盗基德的滑翔翼 - LIS1014.登山 - LIS最长公共子…

【JaveEE】多线程之阻塞队列(BlockingQueue)

目录 1.了解阻塞队列 2.生产者消费者模型又是什么? 2.1生产者消费者模型的优点 2.1.1降低服务器与服务器之间耦合度 2.1.2“削峰填谷”平衡消费者和生产的处理能力 3.标准库中的阻塞队列(BlockingQueue) 3.1基于标准库(Bloc…

笔记本只使用Linux是什么体验?

个人主页:董哥聊技术我是董哥,嵌入式领域新星创作者创作理念:专注分享高质量嵌入式文章,让大家读有所得!近期,也有朋友问我,笔记本只安装Linux怎么样,刚好我也借此来表达一下我的感受…

数据结构MySQL —— 索引

目录 一、索引概述 二、索引结构 三、索引分类 四、索引语法 五、SQL性能分析 1. 查看执行频次 2. 慢查询日志 3. show profiles指令 4. explain执行计划 六、索引使用规则 1. 验证索引效率 2. 最左前缀法则 3. 范围查询 4. 索引失效情况 5. SQL提示 6. …

【C++】AVL树

文章目录一、什么是 AVL 树二、AVL 树的节点结构三、AVL 树的插入四、AVL 树的旋转1、左单旋2、右单旋3、左右双旋4、右左双旋5、总结五、VAL 树的验证六、AVL 树的删除七、AVL 树的性能八、AVL 树的代码实现一、什么是 AVL 树 我们在前面学习二叉搜索树时提到,二叉…

【linux】深入了解TCP与UDP

认识端口号 端口号(port)是传输层协议的内容. 端口号是一个2字节16位的整数; 端口号用来标识一个进程, 告诉操作系统, 当前的这个数据要交给哪一个进程来处理; IP地址 端口号能够标识网络上的某一台主机的某一个进程; 一个端口号只能被一个进程占用理解 "端口号" 和…

【Java 并发编程】一文详解 Java 中有几种创建线程的方式

Java 中有几种创建线程的方式?1. Java 程序天然就是多线程的2. 线程的启动与终止2.1 线程的启动(1)继承 Thread 类,重写 run() 方法(2)实现 Runnable 接口,重写 run() 方法(3)Threa…

jwt 学习笔记

概述 JWT,Java Web Token,通过 JSON 形式作为 Web 应用中的令牌,用于在各方之间安全地将信息作为 JSON 对象传输,在数据传输过程中还可以完成数据加密、签名等相关处理 JWT 的作用如下: 授权:一旦用户登…

初识操作系统

目录 1.操作系统是什么 2.为什么要有操作系统 3.操作系统的相关关系 1.驱动程序 2.系统调用接口 3.用户调用接口 4.用户程序 4.用具体的例子理解操作系统 1.操作系统是什么 (1)操作系统是一组管理计算机硬件与软件资源的计算机软件程序 。 (…

STM32入门教程课程简介(B站江科大自化协学习记录)

课程简介 STM32最小系统板面包板硬件平台 硬件设备 STM32面包板入门套件 Windows电脑 万用表、示波器、镊子、剪刀等 软件介绍 Keil MDK 5.24.1 是一款嵌入式软件开发工具,它提供了一个完整的开发环境,包括编译器、调试器和仿真器。它支持各种微控制…

浅谈Dubbo的异步调用

之前简单写了一下dubbo线程模型,提到了Dubbo底层是基于NIO的Netty框架实现的,通过IO线程池和Work线程池实现了请求和业务处理之间的异步从而提升性能。 这篇文章要写的是Dubbo对于消费端调用和服务端接口业务逻辑处理的异步,在2.7版本中Dubb…

异构数据库转换工具体验:将SQLServer数据转换迁移到MySQL

背景 想将一个线上数据库从 SQLServer 转换迁移到 MySQL ,数据表70多张,数据量不大。从网上看很多推荐使用 SQLyog ,还有 Oracle MySQL Server 官方的 Workbeach 来做迁移,但是步骤稍显繁琐;后来从一篇文章的某个角落…

进程间通信【Linux】

文章目录1. 进程间通信1.1 什么是进程间通信1.2 进程间通信的必要性1.3 进程间通信的本质1.4 进程间通信的方式2. 匿名管道2.1 匿名管道的概念2.2 匿名管道的原理注意2.3 实现匿名管道pipe函数步骤1. 创建管道2. 创建子进程3. 构建单向信道子进程父进程构建一个变化的字符串写入…

代码质量提升,代码扫描 review 之 Codacy 工具使用

目录一、什么是Codacy二、GitHub 上使用 Codacy三、Codacy上导入GitHub项目一、什么是Codacy Codacy 是用于代码 review 检测(即代码审查)的工具,目前支持对40多种编程语言检测,如 c、c、c#、java 、python、javascript 等。 Codacy 可用于 GitHub 和 …

【Java 并发编程】我们为什么要学并发编程?

我们为什么要学并发编程?1. 为什么要并发编程?1.1 面试需要1.2 性能调优(1)加快响应时间(2)代码模块化、异步化(3)充分利用 CPU 的资源2. 并发编程的基础概念2.1 进程和线程&#xf…

python自动发送邮件(html、附件等),qq邮箱和网易邮箱发送和回复

在python中,我们可以用程序来实现向别人的邮箱自动发送一封邮件,甚至可以定时,如每天8点钟准时给某人发送一封邮件。今天,我们就来学习一下,如何向qq邮箱,网易邮箱等发送邮件。 一、获取邮箱的SMTP授权码。…

树与二叉树的存储与遍历

文章目录一、树概念二、二叉树三、二叉树的存储与遍历一、树概念 如前面的顺序表,链表,栈和队列都是线性的数据结构,树是非线性的结构。树可以有n个结点,n>0,当n0是就表示树为空 n>0,代表树不为空,不为空的树&am…