Python绘图-9饼图(下)

news2025/1/25 4:29:42

9.6饼图添加阴影

9.6.1图像呈现

9.6.2绘图代码 

# 导入相关库
import numpy as np  # 导入numpy库,用于处理数组和数值计算
import matplotlib.pyplot as plt  # 导入matplotlib的绘图模块,用于可视化
import matplotlib.patheffects as path_effects # 导入matplotlib的路径效果模块,用于为图形添加特殊效果
labels = 'Frogs', 'Hogs', 'Dogs', 'Logs'# 定义标签,这些标签将用于饼图的每个部分
sizes = [15, 30, 45, 10]# 定义每个饼图部分的大小
explode = (0, 0.05, 0, 0)# 定义每个饼图部分的爆炸效果,即部分从中心突出的程度
plt.figure(figsize=(7, 7), dpi=120, facecolor='w')# 创建一个新的图形,设置其大小为7x7英寸,DPI为120,背景颜色为白色
# 绘制饼图
# autopct参数用于显示每个部分的百分比
# textprops参数设置文本属性,这里设置文本颜色为白色
# explode参数设置每个部分的爆炸效果
# startangle参数设置饼图的起始角度
# shadow参数为饼图添加阴影效果
patches, texts, autotexts = plt.pie(sizes,autopct='%1.1f%%',textprops={'color': "w"},explode=explode,startangle=90,shadow=True)
# 遍历每个饼图部分,为其添加路径效果
# 这里为每个部分添加了白色的描边效果
for patch in patches:
    patch.set_path_effects(
        [path_effects.Stroke(linewidth=2.5, foreground='w')])
# 添加图例,设置图例的位置和标题
plt.legend(labels, bbox_to_anchor=(1., .95), title="Labels Name")
# 显示图形  
plt.show()

9.7饼图之默认甜甜圈

9.7.1图像呈现

9.7.2绘图代码 

# 导入相关库
import numpy as np  # 导入numpy库,用于处理数组和数值计算
import matplotlib.pyplot as plt  # 导入matplotlib的绘图模块,用于可视化
# 设定饼图的每个扇区的厚度
size = 0.3
# 创建一个二维数组vals,其中包含三个元素,每个元素代表饼图中一个扇区的值
vals = np.array([[60.], [37.], [29.]])
# 获取一个colormap,这里选择了"tab20c",这是一个颜色映射,用于在绘图时选择颜色
cmap = plt.get_cmap("tab20c") #设置colormap
# 使用colormap为外层饼图扇区选择颜色
# np.arange(3)生成一个数组[0, 1, 2],然后乘以4,用于在colormap中选择颜色
outer_colors = cmap(np.arange(3) * 4)
# 使用colormap为内层饼图扇区选择颜色
# 这里选择了一些特定的颜色索引
inner_colors = cmap(np.array([1, 2, 5, 6, 9, 10]))
# 创建一个新的图形,并设定其大小为10x10英寸
plt.figure(figsize=(10, 10))
# 绘制饼图
# vals.sum(axis=1)计算vals数组中每行的和,即每个扇区的总值
# radius=1设置饼图的半径为1
# colors=outer_colors设置外层饼图扇区的颜色
# wedgeprops是一个字典,用于设置饼图扇区的属性
# width=size设置每个扇区的厚度为0.3
# edgecolor='r'设置每个扇区的边缘颜色为红色
plt.pie(vals.sum(axis=1),radius=1,colors=outer_colors,wedgeprops=dict(width=size, edgecolor='r'))
# 显示图形 
plt.show()

9.7.3注意

需要注意的是,虽然代码中定义了inner_colors,但在这段代码中并没有使用它来设置内层饼图扇区的颜色。如果你想绘制一个嵌套饼图(即一个饼图内部还有另一个饼图),你需要使用其他方法或库来实现,因为matplotlibpie函数本身并不直接支持嵌套饼图。

9.8饼图之不同内径甜甜圈图

9.8.1图像呈现

9.8.2绘图代码 

# 导入相关库
import numpy as np  # 导入numpy库,用于处理数组和数值计算
import matplotlib.pyplot as plt  # 导入matplotlib的绘图模块,用于可视化
# 创建一个二维数组vals,其中包含三个元素,每个元素代表饼图中一个扇区的值
vals = np.array([[60.], [37.], [29.]])
# 获取一个名为"tab20c"的colormap
cmap = plt.get_cmap("tab20c")
# 使用colormap为饼图扇区选择颜色
# np.arange(3)生成一个数组[0, 1, 2],然后乘以4,用于在colormap中选择颜色
outer_colors = cmap(np.arange(3) * 4)
# 创建一个新的图形,并设置其大小为10x10英寸
plt.figure(figsize=(10,10))
# 创建一个1x2的子图网格,并选择第一个子图进行绘图
plt.subplot(121)
# 绘制饼图
# vals.sum(axis=1)计算vals数组中每行的和,即每个扇区的总值
# radius=1设置饼图的半径为1
# colors=outer_colors设置饼图扇区的颜色
# wedgeprops是一个字典,用于设置饼图扇区的属性
# width=.3设置每个扇区的厚度为0.3
# edgecolor='w'设置每个扇区的边缘颜色为白色
plt.pie(vals.sum(axis=1), radius=1, colors=outer_colors,wedgeprops=dict(width=.3, edgecolor='w'))
# 为第一个子图设置标题'Size = 0.3'
plt.title('Size = 0.3')
# 选择第二个子图进行绘图
plt.subplot(122)
# 再次绘制饼图,但这次扇区的厚度为0.5
plt.pie(vals.sum(axis=1), radius=1, colors=outer_colors,wedgeprops=dict(width=.5, edgecolor='w'))
# 为第二个子图设置标题'Size = 0.5'
plt.title('Size = 0.5')
# 显示图形  
plt.show()

9.8.3注意

这段代码创建了一个包含两个子图的图形。每个子图上都绘制了一个饼图,但扇区的厚度(即扇区与扇区之间的间距)在两个饼图中是不同的。第一个饼图的扇区厚度为0.3,而第二个饼图的扇区厚度为0.5。这样做可以直观地比较不同厚度的扇区对饼图外观的影响。同时,两个饼图都使用了相同的颜色映射和颜色设置。

9.9饼图之多甜甜圈图

9.9.1图像呈现 

9.9.2绘图代码

# 导入相关库
import numpy as np  # 导入numpy库,用于处理数组和数值计算
import matplotlib.pyplot as plt  # 导入matplotlib的绘图模块,用于可视化
# 创建一个新的图形,并设置其大小为10x10英寸
plt.figure(figsize=(10, 10))
# 设定饼图扇区的厚度
size = 0.3
# 创建一个二维数组vals,其中包含六个值,这些值将用于绘制两个嵌套的饼图
# 第一个饼图将使用每行的和作为扇区大小,第二个饼图将使用每个元素作为扇区大小
vals = np.array([[60., 32.], [37., 40.], [29., 10.]])
# 获取一个名为"tab20c"的colormap
cmap = plt.get_cmap("tab20c")
# 使用colormap为外层饼图扇区选择颜色
# np.arange(3)生成一个数组[0, 1, 2],然后乘以4,用于在colormap中选择颜色
outer_colors = cmap(np.arange(3) * 4)
# 使用colormap为内层饼图扇区选择颜色
# 这里选择了一些特定的颜色索引
inner_colors = cmap(np.array([1, 2, 5, 6, 9, 10]))
# 绘制外层饼图
# vals.sum(axis=1)计算vals数组中每行的和,即每个扇区的总值
# radius=1设置外层饼图的半径为1
# colors=outer_colors设置外层饼图扇区的颜色
# wedgeprops是一个字典,用于设置饼图扇区的属性
# width=size设置每个扇区的厚度为0.3
# edgecolor='w'设置每个扇区的边缘颜色为白色
plt.pie(vals.sum(axis=1),radius=1,colors=outer_colors,wedgeprops=dict(width=size, edgecolor='w'))
# 绘制内层饼图
# vals.flatten()将vals数组展平为一维数组,即使用每个元素作为扇区大小
# radius=1 - size设置内层饼图的半径稍微小于外层饼图,以创建嵌套效果
# colors=inner_colors设置内层饼图扇区的颜色
# wedgeprops同样设置扇区的宽度和边缘颜色  
plt.pie(vals.flatten(),radius=1 - size,colors=inner_colors,wedgeprops=dict(width=size, edgecolor='w'))

plt.show()

9.9.3注意

这段代码的目的是创建一个包含两个嵌套饼图的图形。外层饼图使用vals数组每行的和作为扇区大小,而内层饼图使用vals数组中的每个元素作为扇区大小。两个饼图都使用了tab20c colormap来选择颜色,并且扇区的边缘颜色被设置为白色。内层饼图的半径略小于外层饼图,以创建嵌套效果。

9.10饼图之更个性化甜甜圈图

9.10.1图像呈现

9.10.2绘图代码 

# 导入相关库
import numpy as np  # 导入numpy库,用于处理数组和数值计算
import matplotlib.pyplot as plt  # 导入matplotlib的绘图模块,用于可视化
plt.rcParams['font.sans-serif'] = ['SimHei']  # 运行配置参数中的字体(font)为黑体(simHei)
fig, ax = plt.subplots(figsize=(10, 4.5),dpi=120,subplot_kw=dict(aspect="equal"))# 创建一个新的图形窗口,并设置其大小、分辨率和子图的属性
# 定义饼图的数据标签
recipe = ["类型1", "类型2", "类型3", "类型4", "类型5","类型6"]
# 定义饼图的数据值
data = [225, 90, 50, 60, 100, 5]
# 绘制饼图,设置扇区的宽度为0.5,起始角度为-40度
wedges, texts = ax.pie(data, wedgeprops=dict(width=0.5), startangle=-40)
# 定义一个字典,用于设置个性化文本箱子的样式
bbox_props = dict(boxstyle="square,pad=0.3", fc="g", ec="k", lw=0.72) #个性化文本箱子
# 定义一个字典,用于设置饼图扇区上标签的样式和位置
kw = dict(arrowprops=dict(arrowstyle="-"),bbox=bbox_props,zorder=0,va="center")
# 遍历每个饼图扇区
for i, p in enumerate(wedges):
    ang = (p.theta2 - p.theta1) / 2. + p.theta1 # 计算扇区的中心角度
    # 根据中心角度计算扇区中心点的x和y坐标
    y = np.sin(np.deg2rad(ang))
    x = np.cos(np.deg2rad(ang))
    horizontalalignment = {-1: "right", 1: "left"}[int(np.sign(x))]# 根据x的正负值确定文本的水平对齐方式
    connectionstyle = "angle,angleA=0,angleB={}".format(ang)# 设置连接文本的样式,使其从扇区的中心指向标签的位置
    kw["arrowprops"].update({"connectionstyle": connectionstyle})# 更新箭头连接的样式
    # 在饼图扇区的中心位置添加标签,标签的文本为recipe列表中的对应项
    ax.annotate( recipe[i],xy=(x, y),xytext=(1.35 * np.sign(x), 1.4 * y),horizontalalignment=horizontalalignment,**kw)
ax.set_title("个性甜甜圈")# 设置图形的标题  

plt.show()

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

小程序管理平台:助力企业数字化转型

微信小程序生态近年来发展迅猛,已成为中国互联网不可忽视的力量。截至2023年6月,微信小程序数量已超过300万,同比增长25%,涵盖了电商、生活服务、教育、金融等众多行业。微信小程序内容生态已经日趋完善,并满足各领域用…

脾胃,胃肠中医笔记

目录 脾胃的功能思伤脾,脑力工作者过度思考会伤脾胃焦虑会导致脾胃受伤按摩肚子顺时针还是逆时针,顺时针促消化/逆时针促排便脾胃生病症状舌苔腹胀、滞气的原因为什么大便稀?湿气重的原因及解决方案自测湿气重的方法 治疗脾胃药物总结补中益气…

Java开发中遇到最难的问题,多线程面试题高并发

开篇介绍 个人背景: 不说太多废话,但起码要让你先对我有一个基本的了解。本人毕业于浙江某二本院校,算是科班出身,毕业后就进了一家外包公司做开发,当然不是阿里的外包,具体什么公司就不透露了&#xff0…

Java项目:39 springboot008房屋租赁系统

作者主页:源码空间codegym 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 房屋租赁系统的设计基于现有的网络平台,主要有管理员、房东、用户三个角色 管理员可以在线查看系统已有的人中心、房屋类型管理、…

STM32FreeRTOS信号量(STM32cube高效开发)

一、信号量 (一)信号量概括 信号量是操作系统中重要的一部分,信号量是一种解决同步问题的机制,可以实现对共享资源的有序访问。 FreeRTOS 提供了多种信号量,按信号量的功能可分为二值信号量、计数型信号量、互斥信…

python文本分析与贝叶斯算法

一、python文本分析概念 文本分析中第一个概念是停用词,这种词有三个特点:(1)语料中大量出现;(2)没啥用;(3)留着没用。比如符号(!#&a…

2024年最全洗地机选购攻略盘点丨希亦、小米、云鲸、海尔洗地机哪款值得入手?

在现代家居清洁中,洗地机是不可或缺的得力助手,它融合了吸尘、拖地等多种功能。面对市场上琳琅满目的洗地机品牌和型号,选择一个可靠的品牌至关重要。优质的品牌能够提供高品质的产品,使您的清洁工作更加轻松高效。本文将向您推荐…

Android开发基础面试题,PDF超过6000页

前言 从毕业到现在面试也就那么几家公司,单前几次都比较顺利,在面到第三家时都给到了我offer!前面两次找工作,没考虑到以后需要什么,自己的对未来的规划是什么,只要有份工作,工资符合自己的要求…

阿里云域名优惠口令2024年最新,com、cn和域名注册续费使用

2024年阿里云域名优惠口令,com域名续费优惠口令“com批量注册更享优惠”,cn域名续费优惠口令“cn注册多个价格更优”,cn域名注册优惠口令“互联网上的中国标识”,阿里云优惠口令是域名专属的优惠码,可用于域名注册、续…

领到了腾讯云服务器红包,可以用于购买服务器,开心!

在2024年腾讯云新春采购节优惠活动上,可以领取新年惊喜红包,打开活动链接 https://curl.qcloud.com/oRMoSucP 会自动弹出红包领取窗口,如下图: 腾讯云2024新春采购节红包领取 如上图所示,点击“领”红包,每…

[C语言]——C语言常见概念(1)

目录 一.C语言是什么、 二.C语言的历史和辉煌 三.编译器的选择(VS2022为例) 1.编译和链接 2.编译器的对比 3.VS2022 的优缺点 四.VS项目和源文件、头文件介绍 五.第⼀个C语言程序 ​​​​​​​ 一.C语言是什么、 ⼈和⼈交流使⽤的是⾃然语⾔&…

20 easy 70. 爬楼梯

//假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 // // 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? // // // // 示例 1: // // //输入:n 2 //输出:2 //解释:有两种方法可以爬到楼顶。 /…

cuda WSL2 无需单独安装

https://docs.nvidia.com/cuda/wsl-user-guide/index.html 这个写的很详细

Day27-Linux系统服务管理

Day27-Linux系统服务管理 1. ltrace:跟踪进程调用库函数2. 进程管理总结3. 什么是平均负载4. 可运行状态和不可中断状态是什么5. 平均负载其实就是【单位时间内的活跃进程数】。6. 如何查看Linux系统的cpu核数和颗数?7. 平均负载案例分析实战7.1 场景一&…

Pandas 之 merge

merge的作用: merge函数在Python的pandas库中的作用是用来合并两个或多个DataFrame数据表,依据指定的一个或多个键(通常是列名)进行连接操作[1]。 merge函数可以有多种连接类型(如内连接inner、左连接left、右连接ri…

SmartX 携手 openGauss 社区发布联合方案评测与性能最佳实践 | 附优化方法与测试数据

近日,北京志凌海纳科技有限公司(以下简称 “SmartX”)携手 openGauss 社区完成了 openGauss 数据库基于 SmartX 超融合平台(SMTX OS)和 SmartX 分布式存储平台(SMTX ZBS)的性能测试和调优。 结…

13. C++类使用方式

【类】 C语言使用函数将程序代码模块化,C通过类将代码进一步模块化,类用于将实现一种功能的全局数据、以及操作这些数据的函数集中存储在一起,同时可以设置类成员的访问权限,禁止外部代码使用和篡改本类成员,类成员访…

Vue开发实例(六)实现左侧菜单导航

左侧菜单导航 一、一级菜单二、二级菜单三、三级菜单1、加入相关事件 四、菜单点击跳转1. 创建新页面2. 配置路由3. 菜单中加入路由配置4、处理默认的Main窗口为空的情况 五、动态左侧菜单导航1、动态实现一级菜单2、动态实现二级菜单 一、一级菜单 在之前的Aside.vue中去实现…

Dynamo初学尝试梳理(五)-代码块上

“学而时习之,不亦说乎”,今天接着来,稍微提高点难度(高手直接忽略就行)。 代码块(Code Block),是 dynamo 中可以直接输入 DesignScript 的节点。可以通过双击鼠标左键,快…

JAVA WEB案例-登录校验-日志记录

一 前言 在现代社会中,随着互联网的快速发展,WEB应用的安全性问题变得越来越突出。作为一名程序员,我们不仅要注重WEB应用的功能实现,还需要重视安全性问题。在实际开发中,登录校验是非常重要的安全措施,能…