Matplotlib绘制漂亮的饼状图

2023-11-17

python绘图系列文章目录

往期python绘图合集:
python绘制简单的折线图
python读取excel中数据并绘制多子图多组图在一张画布上
python绘制带误差棒的柱状图
python绘制多子图并单独显示
python读取excel数据并绘制多y轴图像
python绘制柱状图并美化|不同颜色填充柱子
python随机生成数据并用双y轴绘制两条带误差棒的折线图
Python绘制带误差棒的柱状图渐变色填充含数据标注(进阶)
python绘制散点图|散点大小和颜色深浅由数值决定



饼状图是数据可视化中常见的一种类型,能够直观地表示各类别在总体中所占的比例。Matplotlib 是 Python 中常用的数据可视化库,提供了丰富的绘图工具和函数,包括绘制饼状图的方法。

本文将介绍如何使用 Matplotlib 绘制复杂的饼状图,包含多个子图以及两个坐标轴。我们将结合实例代码进行讲解,帮助读者快速掌握饼状图的绘制方法和技巧。

1、 安装和导入 Matplotlib

# 使用 pip 安装 Matplotlib
pip install matplotlib
# 使用 conda 安装 Matplotlib
conda install matplotlib

安装完成后,可以在 Python 中导入 Matplotlib 库,通常使用以下方式:

import matplotlib.pyplot as plt

2、 绘制简单的饼状图

为了更好地理解和掌握饼状图的基本绘制方法,我们先来看一个简单的例子。假设有四种动物,它们分别是青蛙、猪、狗和木头,它们分别占据了总动物数量的 15%、30%、45% 和 10%。我们可以使用 Matplotlib 来绘制这个饼状图,并将它们按逆时针顺序从大到小排列。代码如下:

import matplotlib.pyplot as plt

# 各类别的标签和比例
labels = ['Frogs', 'Hogs', 'Dogs', 'Logs']
sizes = [15, 30, 45, 10]

# 饼状图中各部分的颜色
colors = ['yellowgreen', 'gold', 'lightskyblue', 'lightcoral']
# 绘制饼状图
plt.pie(sizes, labels=labels, colors=colors, autopct='%1.1f%%', startangle=90)
# 显示图形
plt.show()

在上述代码中,我们首先定义了四个动物种类的标签和比例变量,分别存放了它们的名称和所占比例。然后,我们定义了饼状图中各部分的颜色,用于美化图形。最后,使用 plt.pie() 方法绘制了饼状图,并传递了各种参数,如标签、颜色、百分比格式和起始角度。最后,运行 plt.show() 显示图形。绘制完成后,我们将得到一个简单的饼状图。
在这里插入图片描述

3、 绘制复杂的饼状图

在实际情况中,我们可能需要绘制更加复杂和详细的饼状图,以更好地展示数据。下面,我们将介绍如何使用 Matplotlib 绘制一个包含多个子图和坐标轴的复杂饼状图。

3.1 准备工作

首先,我们需要导入一些必要的库和模块:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties

其中,NumPy 是 Python 中处理数值计算的常用库,Matplotlib 则是绘制图形的核心库。此外,我们还导入了 FontProperties 类,用于设置字体属性。

接下来,我们定义一些变量,用于存储饼状图中各部分的标签、比例和颜色。代码如下:

# 饼状图中各部分的标签、比例和颜色
labels = ['Frogs', 'Hogs', 'Dogs', 'Logs']
sizes = [15, 30, 45, 10]
colors = ['yellowgreen', 'gold', '#FF0000', 'lightcoral']

4 、绘制子图和设置坐标轴

为了绘制复杂的饼状图,我们需要使用 plt.subplots() 方法创建多个子图,并在每个子图上绘制不同的饼状图。同时,我们还需要设置两个坐标轴,以便更好地展示数据。代码如下:

import numpy as np 
import matplotlib.pyplot as plt 
from matplotlib.font_manager import FontProperties
# The slices will be ordered and plotted counter - clockwise . 
labels =' Frogs ',' Hogs ',' Dogs ',' Logs '
sizes =[15,30,45,10]

colors =['yellowgreen','gold','#FF0000','lightcoral'] 

explode =(0,0.15,0,0.2)
#使饼状图中第2片和第4片裂开
fig = plt.figure(dpi=300) 

font = FontProperties(fname=r"c:\windows\fonts\times.ttf", size=12)

ax = fig.gca ()

ax.pie ( np.random.random (4), explode = explode , labels = labels , colors = colors ,textprops={'fontproperties': font},
autopct ='%1.1f%%', shadow = True , startangle =90, radius =0.8, center =(1,1), frame = True,)
ax.pie ( np.random.random (4), explode = explode , labels = labels , colors = colors ,textprops={'fontproperties': font},
autopct ='%1.1f%%', shadow = True , startangle =90, radius =0.8, center =(-1,1), frame = True )
ax.pie ( np.random.random (4), explode = explode , labels = labels , colors = colors ,textprops={'fontproperties': font},
autopct ='%1.lf%%', shadow = True , startangle =90, radius =0.8, center =(-1,-1), frame = True )
ax.pie ( np.random.random (4), explode = explode , labels = labels , colors = colors ,textprops={'fontproperties': font},
autopct ='%1.1f%%', shadow = True , startangle =90, radius =0.8, center =(1,-1), frame = True )

ax.set_xticks ([-1,1])
ax.set_yticks ([-1,1])
ax.set_xticklabels ([" Sunny "," Cloudy "],fontname='Times New Roman',fontsize=14)#设置坐标轴刻度上显示的标签 
ax.set_yticklabels ([" Dry "," Rainy "],fontname='Times New Roman',fontsize=14)
ax.set_xlim ((-2.5,2.5))
ax.set_ylim ((-2.5,2.5))
# Set aspect ratio to be equal so that pie is drawn as a circle . ax . set _ aspect (' equal ')

for tick in ax.get_xticklabels():
    tick.set_fontname("Times New Roman")
for tick in ax.get_yticklabels():
    tick.set_fontname("Times New Roman")
# #设置坐标轴刻度

# #设置坐标轴跨度
plt.tight_layout()
plt.savefig('.jpg')

4.1 运行结果

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Matplotlib绘制漂亮的饼状图 的相关文章

随机推荐

  • 链式存储之:链表的引出及其简介

    上篇博客 笔者讲解了一下顺序表ArrayList 对于ArrayList有想法的各位老铁可以看一下 值得思索的 ArrayList和线性表 你确定错过这次机会 念君思宁的博客 CSDN博客值得思索的 ArrayList和线性表 你确定错过这
  • python格式化

    python格式化是python语法中很基础也是很重要的知识 本文介绍了python格式化的几种方法仅供参考 一 格式化方法1 格式为 输出内容 对应的变量1 对应的变量2 其中 d表示整数类型 s表示字符串类型 f表示浮点类型 例子 设以
  • 半实物仿真测试方法、装置及系统与流程

    机器人控制器的测试主要包括控制器核心软件的测试和外部接口的测试 同时为了保证机器人控制器在真实工况下进行测试 需要对其实际运行的各项功能和性能指标进行测试 半实物仿真测试平台是连接控制器和被控对象进行测试的测试平台 在基于半实物仿真的实验中
  • 数据清洗:让数据更纯净,Python实战 机器学习&深度学习

    目录 步骤1 导入必要的库 步骤2 加载数据 步骤3 处理缺失值 3 1 删除含有缺失值的行
  • 给应届生开出20K月薪,看到招聘要求后,我傻眼了......

    一到秋招季 就有 灵异 事件发生 应届生痛斥找不到工作 精心准备的简历投了几十家过不了网申 而企业控诉招不到人才 今年明明扩招了 应届生be like 这些岗位都挺适合我的 简直一个量身打造 用人单位be like 岗位要求门槛写得也不高
  • MySQL数据库迁移快速导出导入大量数据(外发)

    数据库迁移是我们经常可遇到的问题 对于少量的数据 迁移基本上不会有什么问题 生产环境中 有以下情况需要做迁移工作 磁盘空间不够 比如一些老项目 选用的机型并不一定适用于数据库 随着时间的推移 硬盘很有可能出现短缺 业务出现瓶颈 比如项目中采
  • vue-cli3打包项目

    vue cli3打包项目 使用vue cli3开发好项目后 就可以将它打包 这样就可以通过输出文件中的index html来访问该项目了 在打包项目之前需要先修改两个文件 分别是vue config js router index js 如
  • 【C++】【TensorRT】检测时间不稳定原因汇总(持续更新)

    本人使用C 版本的TensorRT框架做模型部署的开发工作 在实际上线具体的项目过程中碰到过检测时间不理想的情况 所以本人专门为此写一篇博客记录曾经遇到过的坑以及对应的解决方案 一 相同型号的机器和显卡检测时间不同 1 问题描述 两台相同型
  • 一文掌握JS 事件循环(Event Loop)

    作为前端开发者 事件循环 Event Loop 是必须掌握的内容 它是前端极其重要的基础知识 在日常的工作或者面试中也是一个非常高频的话题 理解 JavaScript 的事件循环往往伴随着宏任务和微任务 JavaScript 单线程执行过程
  • 模电基础(2)半导体二极管

    1 二极管的组成 二极管 将PN结封装起来 引出两个电极就构成了半导体二极管 二极管的常见结构包括 点接触型 图a 面接触型 图b 平面型 图c 点接触型 结面积小 不可通过较大的电流 结电容小 工作频率高 面接触型的结面积变大 所允许的电
  • Go语言网络编程(socket编程)http编程

    1 http编程 1 1 1 web工作流程 Web服务器的工作原理可以简单地归纳为 客户机通过TCP IP协议建立到服务器的TCP连接 客户端向服务器发送HTTP协议请求包 请求服务器里的资源文档 服务器向客户机发送HTTP协议应答包 如
  • 基于滑模控制的永磁同步电机直接转矩控制学习

    导读 针对传统的DTC存在的问题进行 本期主要介绍基于滑模控制的永磁同步电机直接转矩控制 如果需要文中的仿真模型 关注微信公众号 浅谈电机控制 获取 传统DTC采用两个 Bang bang 控制器分别对转矩和磁链幅值进行控制 响应快速 对系
  • IDEA中的方法、数组和重载

    IDEA软件 常用快捷键 快捷键 功能 Ctrl Shift 选中代码注释 多行注释 再按取消注释 Ctrl Alt L 格式化代码 Alt Ins 自动生成代码 toString get set等方法 Alt Enter 导入包 自动修正
  • BSC链节点搭建 保姆级详细教程

    BSC链节点搭建 保姆级详细教程 文档最后修改日期 2023 06 24 一 服务器配置要求 官方建议配置 系统 Mac Linux CPU 16核 内存 64 GB 内存 带宽 50M以上 硬盘 大于2T固态SSD可用空间数据盘 本次搭建
  • CCPC2016长春J (hdu 5920 Ugly Problem)

    给一个数字 n 1 lt n lt 1e18 让你找一些数字加起来和为 n 数字个数不超过50个而且数字都是回文数字 每次找到大小最接近这个数的回文数即可 如6745888可以找到6745476 6960242可以找到6950595 用大数
  • 全链路压测

    核心流程 全链路压测实施的核心流程如下 骤一 确定压测目标 压测目标主要包括压测范围 策略 目的 往往与业务 技术目标息息相关 例如 压测范围 用户注册加登录 为大规模拉新做准备 压测策略 高仿真生产环境压测 提前经历真实的业务高峰 压测目
  • Vue Baidu Map组件封装:多边形组件和右键菜单

    在Vue上进行开发 地图使用了百度提供的Vue Baidu Map 当前版本为v0 21 15 官方文档地址 https dafrok github io vue baidu map zh index 开发需求 在百度地图上动态进行多边形的
  • 【JavaSe】高级特性篇(三) Java高级特性注解

    JavaSe 高级特性篇 三 Java高级特性注解 1 注解 Annotation 概述 1 1 定义 定义 注解 Annotation 也叫元数据 一种代码级别的说明 它是JDK1 5及以后版本引入的一个特性 与类 接口 枚举是在同一个层
  • Redis-五种数据结构

    1 五种数据结构图解如下 1 1 String数据结构 命令 get set del incr decrget set del incr decr 联想java map
  • Matplotlib绘制漂亮的饼状图

    python绘图系列文章目录 往期python绘图合集 python绘制简单的折线图 python读取excel中数据并绘制多子图多组图在一张画布上 python绘制带误差棒的柱状图 python绘制多子图并单独显示 python读取exc