当前位置: 首页 > news >正文

Matplotlib绘图从零入门到实践(含各类用法详解)

一、引入

Matplotlib 是一个Python的综合库,用于在 Python 中创建静态、动画和交互式可视化。
本教程包含笔者在使用Matplotlib库过程中遇到的各类完整实例与用法还有遇到的库理论问题,可以根据自己的需要在目录中查询对应的用法、实例以及第四部分关于理论的讨论。
教程参考了Eric Matthes的Python Crash Course中的Matplotlib部分和Matplotlib官方示例。
如果你希望了解更详细的用法和实例,可以查看Matplotlib官方网站和Python Crash Course。

二、用法部分

①基础类

1.安装Matplotlib

sudo pip install matplotlib  # in Linux

2.引用Matplotlib常用模块

import matplotlib.pyplot as plt  # 引入matplotlib的pyplot模块

3.绘制图形

values = [1, 2, 3, 4, 5]  # x值列表
squares = [1, 4, 9, 16, 25]  # y值列表
plt.plot(values, squares)  # 绘图

4.查看图形

plt.show()  # 打开matplotlib查看器,显示绘制的图形

5.保存图形

plt.savefig("file_name.png",bbox_inches="tight")#保存文件,bbox_inches可选择是否紧凑裁剪

②调节设置类

1.线宽调节

plt.plot(x, y, linewidth=5)  # 线宽设置为5

2.设置标题

Figure标题

figure标题在整个figure的上部正中。

fig.suptitle("figure_suptitle")  # 为Figure设置标题

Axes标题

ax.set_title("title")  # 为Axes设置标题

一般情况标题

对于不区分axes和figure的情况,比如一个figure里只有一个axes,以下命令也可以使用

plt.title("title", fontsize=24)  # 设置标题,字体大小设置为24

3.设置轴标签

plt.xlabel("Value", fontsize=14)  # 设置图标题x轴标签,字体大小设置为14
plt.ylabel("Square of Value", fontsize=14)  # 设置y轴标签,字体大小设置为14

4.设置轴刻度

plt.tick_params(axis="both", which="major", labelsize=14)  # 设置各轴刻度为等距,标签大小设置为14,major为应用参数的刻度组

5.隐藏坐标轴

若对图像有洁净的追求,希望隐去坐标轴,可以使用

plt.axis("off")  # 隐藏坐标轴

6.设置figure尺寸

plt.figure(figsize=(10, 6))  # 设置figure尺寸,单位为英寸

7.设置轴

ax为一个axes artist,设置x轴与y轴的限幅,并设置x轴和y轴的标签

ax.set(xlim=[0, 3], ylim=[-4, 10], xlabel='Time [s]', ylabel='Z [m]')

8.设置标签

为点设置格式化标签

需要格式化的标签时,为label添加f

scat = ax.scatter(t[0], z[0], c="b", s=5, label=f'v0 = {v0} m/s')  # 需要格式化的标签时,为label添加f

9.设置图例

ax.legend()  # 将添加过label的artists添加到四角的图例上

③数值处理类

1.生成x值和对应y值[规律]

法1:range()

和法3类似,法3更优

values = list(range(1, 101))  # list搭配range生成多个数的列表
squares = [value ** 2 for value in values]  # 根绝values生成squares

法2:numpy.linspace()

注:该方法引用Numpy库

x = np.linspace(0, 2 * np.pi, 200)  # np.linspace(起始点,终止点,采样个数)
y = np.sin(x)

法3:np.arange()

和法1类似,优势在于不用再转一次列表。
注:该方法引用Numpy库

x = np.arange(0.0, 2.0, 0.01)

2.生成x值和对应y值[随机]

④常见图形类

1.生成点

plt.scatter(values, squares, color="red", s=10)  # 绘制散点图,s为点大小,color为颜色

2.生成线

生成线的本质是生成足够多的点,使之连结,在视觉上呈现线的感觉。

x = np.linspace(0, 2 * np.pi, 200)  # 生成足够多的x
y = np.sin(x)  # 生成足够多对应的y
plt.plot(x, y)  # 绘图

⑤美化类

1.颜色映射

颜色映射可以将数值大小映射为颜色深浅,从而绘制出数值与颜色相关的图像,比如温度低的位置颜色浅,温度高的地方颜色深。

法1:数值颜色映射

plt.scatter(x, y, c=y, cmap="Reds")  # 颜色映射
# https://matplotlib.org/stable/gallery/color/colormap_reference.html#sphx-glr-gallery-color-colormap-reference-py

如果按照点的先后顺序颜色映射,需要先为规则c生成数值列表

法2:顺序颜色映射

points_number = list(range(101))  # 生成0~100的cmap顺序列表
plt.scatter(x, y, c=points_number, cmap="Blues", s=5)  # 按照顺序颜色映射

⑥动画类

在主代码中写出绘画0时刻的图的代码

三、实例部分

查看github或gitee上的实例代码

四、理论部分

1.Artist、Figure、Axes、Axis的区别

Artist

基本上,图形上可见的所有内容都是Artist,包括Figure、Axes和Axis对象。
Text对象、Line2D对象、collections对象、Patch 对象等也是Artist。
当 Figure 被渲染时,所有的 Artists 都被绘制到画布上。
大多数Artist和Axes挂钩,不能在Axes间切换也不能被Axes共享。

Figure

Figure是整个图形,可以看做窗口,一个Figure可以包含多个Axes。
Figure可以用pyplot.figure()单独创建

fig = plt.figure()  # 创建无Axes的空Figure窗口
fig, ax = plt.subplots()  # 创建带有一个Axes的Figure

Figure也可以用pyplot.subplots()和Axes一起创建。

Axes

Axes 是附加到 Figure 的 Artist,它包含一个用于绘制数据的区域。
Axes通常用pyplot.subplots()和Figure一起创建。
使用axes_name.plot()来绘制数据

fig, ax = plt.subplots()  # 创建带有一个Axes的Figure
ax.plot([1, 2, 3, 4], [1, 4, 2, 3])  # 在Axes上绘制数据

一个Figure上可以有多个Axes。

fig, axs = plt.subplots(2, 2)  # 创建一个带有2X2个Axes的Figure

Axis

一个Axes通常包含两个带有刻度和刻度标签Axis,在3D情况下,一个Axes包含3个Axis,这和我们日常生活中的xyz坐标系含有x、y、z轴是相同的概念。

2.输入数据的要求

Matplotlib要求输入的数据格式为numpy的array,也就是numpy数组。

List与Array区别

list是python的内置数据类型,而 array数组需要导入numpy库,不属于内置类型。
list中的数据类不必相同的,即每个元素可以是不同的数据类型。
而array则是由numpy封装,存放的元素都是相同的数据类型。

Matrix的输入

矩阵Matrix无法直接作为数据输入,需要先通过numpy.asarray()转化为"类数组"才能输入Matplotlib

a = np.matrix([[1, 2], [3, 4]])  # a为numpy矩阵Matrix
a_asarray = np.asarray(a)  # a转化为类数组a_asarray

相关文章:

Matplotlib绘图从零入门到实践(含各类用法详解)

一、引入 Matplotlib 是一个Python的综合库,用于在 Python 中创建静态、动画和交互式可视化。 本教程包含笔者在使用Matplotlib库过程中遇到的各类完整实例与用法还有遇到的库理论问题,可以根据自己的需要在目录中查询对应的用法、实例以及第四部分关于…...

C语言 入门教程||C语言 指针||C语言 字符串

C语言 指针 学习 C 语言的指针既简单又有趣。通过指针,可以简化一些 C 编程任务的执行,还有一些任务,如动态内存分配,没有指针是无法执行的。所以,想要成为一名优秀的 C 程序员,学习指针是很有必要的。 …...

Nacos2.x+Nginx集群配置

一、配置 nacos 集群 注意:需要先配置好 nacos 连接本地数据库 1、拷贝三份 nacos 2、修改配置文件(cluster.conf) 修改启动端口: nacos1:8818 nacos2:8828 nacos3:8838 当nacos客户端升级为…...

Android源码分析 - InputManagerService与触摸事件

0. 前言 有人问到:“通过TouchEvent,你可以获得到当前的触点,它更新的频率和屏幕刷新的频率一样吗?”。听到这个问题的时候我感到很诧异,我们知道Android是事件驱动机制的设计,可以从多种服务中通过IPC通信…...

python库--urllib

目录 一.urllib导入 二.urllib爬取网页 三.Headers属性 1.使用build_opener()修改报头 2.使用add_header()添加报头 四.超时设置 五.get和post请求 1.get请求 2.post请求 urllib库和request库作用差不多,但比较起来request库更加容易上手,但该了…...

美团前端二面常考react面试题及答案

什么原因会促使你脱离 create-react-app 的依赖 当你想去配置 webpack 或 babel presets。 React 16中新生命周期有哪些 关于 React16 开始应用的新生命周期: 可以看出,React16 自上而下地对生命周期做了另一种维度的解读: Render 阶段&a…...

环境搭建04-Ubuntu16.04更改conda,pip的镜像源

我常用的pipy国内镜像源: https://pypi.tuna.tsinghua.edu.cn/simple # 清华 http://mirrors.aliyun.com/pypi/simple/ # 阿里云 https://pypi.mirrors.ustc.edu.cn/simple/ #中国科技大学1、将conda的镜像源修改为国内的镜像源 先查看conda安装的信息…...

【C++进阶】四、STL---set和map的介绍和使用

目录 一、关联式容器 二、键值对 三、树形结构的关联式容器 四、set的介绍及使用 4.1 set的介绍 4.2 set的使用 五、multiset的介绍及使用 六、map的介绍和使用 6.1 map的介绍 6.2 map的使用 七、multimap的介绍和使用 一、关联式容器 前面已经接触过 STL 中的部分…...

JavaSE学习进阶 day1_01 static关键字和静态代码块的使用

好的现在我们进入进阶部分的学习,看一张版图: 前面我们已经学习完基础班的内容了,现在我们已经来到了第二板块——基础进阶,这部分内容就不是那么容易了。学完第二板块,慢慢就在向java程序员靠拢了。 面向对象进阶部分…...

苹果笔可以不买原装吗?开学必备性价比电容笔

在当今的时代,电容笔日益普及,而且相关的功能也逐渐完善。因此,在使用过程中,怎样挑选一款性价比比较高的电容笔成为大家关心的焦点。随着电容笔的普及,更好更便宜的电容笔成为了一种趋势。那么,哪个品牌的…...

数据库连接与properties文件

管理properties数据库&#xff1a; 现在pom文件中加入Druid的坐标&#xff1a; <dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.8</version></dependency>配置文件中添加相应的数据&…...

Linux上的校验和验证

校验和&#xff08;checksum&#xff09;程序用来从文件中生成相对较小的唯一密钥。我们可以重新计算该密钥&#xff0c;用以检查文件是否发生改变。修改文件可能是有意为之&#xff08;添加新用户会改变密码文件&#xff09;&#xff0c;也可能是无意而为&#xff08;从CD-ROM…...

杂记——14.git在idea上的使用及其实际开发介绍

这篇文章我们来讲一下git在idea上的使用&#xff0c;以及在实际开发过程中各个分支的使用及其具体的流程 目录 1.git在idea上的使用 1.1 idea上的git提交 1.2 idea上的分支切换 2.git在实际运用时的分支及其流程 2.1分支介绍 2.2具体流程 3.小结 1.git在idea上的使用 …...

记一次Nodejs减低npm版本的踩坑日记

使用了npm install -g npm6.4.1指令之后&#xff0c;把npm版本减低了&#xff0c;让后悲催的就来了。 由于npm 6.4.1 已经过时&#xff0c;导致运行npm时出现 npm does not support Node.js v18.14.2 版本不兼容问题 升级npm版本&#xff0c;npm install -g npmlatest 没用还是…...

【iOS】—— 初识RAC响应式编程

RAC&#xff08;ReactiveCocoa&#xff09; 文章目录RAC&#xff08;ReactiveCocoa&#xff09;响应式编程和函数式编程的区别函数式编程响应式编程响应式编程的优点RAC操作1.利用button点击实现点击事件和传值2.RACSignal用法RACSignal总结&#xff1a;3.对于label的TapGestur…...

Java——面向对象

目录 前言 一、什么是面向对象&#xff1f; 面向过程 & 面向对象 面向对象 二、回顾方法的定义和调用 方法的定义 方法的调用 三、类与对象的创建 类和对象的关系 创建与初始化对象 四、构造器详解 五、创建对象内存分析 六、封装详解 七、什么是继承&#x…...

电影《毒舌律师》观后感

上周看了《毒蛇律师》这部电影&#xff0c;讲述一位’大律师’在法庭为己方辩护&#xff0c;最终赢得辩护的故事。 &#xff08;1&#xff09;人之常情 说起法律相关&#xff0c;不禁会让人联想到讲法律相关知识的罗翔老师&#xff0c;平时也会看他相关视频&#xff0c;无论是亲…...

【活学活用掌握trap命令】

trap 命令用于指定在接收到信号后将要采取的动作&#xff0c;常见的用途是在脚本程序被中断时完成清理工作。当 shell 接收到 sigspec 指定的信号时&#xff0c; arg 参数(通常是执行命令)会被读取&#xff0c;并被执行。 1. 命令介绍 开始掌握基本的使用方式和方法 [1] 语法…...

计算机组成原理4小时速成6:输入输出系统,io设备与cpu的链接方式,控制方式,io设备,io接口,并行串行总线

计算机组成原理4小时速成6&#xff1a;输入输出系统&#xff0c;io设备与cpu的链接方式&#xff0c;控制方式&#xff0c;io设备&#xff0c;io接口&#xff0c;并行串行总线 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c…...

MyBatis源码分析(三)SqlSession的执行主流程

文章目录一、熟悉主要接口二、SqlSession的获取1、通过数据源获取SqlSession三、Mapper的获取与代理1、从SqlSession获取Mapper2、执行Mapper方法前准备逻辑3、SqlCommand的创建4、构造MethodSignature四、执行Mapper的核心方法1、执行Mapper的方法逻辑五、简单SELECT处理过程1…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 现代智能交通系统 &#xff08;ITS&#xff09; 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 &#xff08;…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候&#xff0c;遇到了一些问题&#xff0c;记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

GC1808高性能24位立体声音频ADC芯片解析

1. 芯片概述 GC1808是一款24位立体声音频模数转换器&#xff08;ADC&#xff09;&#xff0c;支持8kHz~96kHz采样率&#xff0c;集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器&#xff0c;适用于高保真音频采集场景。 2. 核心特性 高精度&#xff1a;24位分辨率&#xff0c…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...

CSS设置元素的宽度根据其内容自动调整

width: fit-content 是 CSS 中的一个属性值&#xff0c;用于设置元素的宽度根据其内容自动调整&#xff0c;确保宽度刚好容纳内容而不会超出。 效果对比 默认情况&#xff08;width: auto&#xff09;&#xff1a; 块级元素&#xff08;如 <div>&#xff09;会占满父容器…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...

Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换

目录 关键点 技术实现1 技术实现2 摘要&#xff1a; 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式&#xff08;自动驾驶、人工驾驶、远程驾驶、主动安全&#xff09;&#xff0c;并通过实时消息推送更新车…...