Matplotlib基础01( 基本绘图函数/多图布局/图形嵌套/绘图属性)
Matplotlib基础
Matplotlib是一个用于绘制静态、动态和交互式图表的Python库,广泛应用于数据可视化领域。它是Python中最常用的绘图库之一,提供了多种功能,可以生成高质量的图表。
Matplotlib是数据分析、机器学习等领域数据可视化的重要工具,广泛应用于科研、教学、报告等多种场景。
4.1 绘图基本函数
- Matplotlib参数配置
import matplotlib.pyplot as plt
#运行时配置参数
# rcParams : runtime configuration Parameters
#如果浏览器不显示图片,就需要加上这句话
%matplotlib inline
#让图片中可以显示中文
plt. rcParams['font.sans-serif'] = 'SimHei'
#让图片中可以显示负号
plt.rcParams['axes.unicode_minus'] = False
#支持svg矢量图
%config Inlinebackend.figure_format = 'svg'
- plt.plot()函数
# 用于绘图
# 1.需要传入相关的数据plt.plot(x,y)
# 2.颜色(color=''):b(蓝色),g(绿色),r(红色),c(青色),m(品红),y(黄色),k(黑色),w(白色)
# 3.线条样式(ls='--'):'-','--','-.',':','.'
# 4.plt.plot() 返回的是一个 matplotlib.lines.Line2D 实例,这个对象表示了你所绘制的图形中的一条线。这个返回值可以用来进一步修改或查询该线的属性,例如颜色、线型、标签等。
n=np.arange(-10,10,0.1)
plt.plot(n,n**2, color='r', ls='--')
plt.show() #展示当前绘图,下次重新绘图
- 绘图画布
plt.figure(figsize=(5,5)) #figsize=(5,5)画布大小5行,5列
plt.figure(dpi=100) #分辨率:表示每英寸多少个点
plt.figure(facecolor='g') #画布的颜色
plt.grid() #绘制网格
plt.plot(n,np.sin(n))
4.2 多图布局与图形嵌套
4.2.1 多图布局
- plt.subplot()函数:plt.subplot(nrows, ncols, index) 是用来创建一个 nrows 行 ncols 列的子图网格,并指定当前子图的位置(index)
# 绘制4个子图
plt.figure(figsize=(8,4))
# 子图1
ax1=plt.subplot(2,2,1) #两行两列第一个子图
ax1.plot(n, np.sin(n))
ax1.set_title("子图1")
# 子图2
ax2=plt.subplot(2,2,2) #两行两列第二个子图
ax2.plot(n, np.sin(n))
ax2.set_title("子图2")
# 子图3
ax3=plt.subplot(2,2,3) #两行两列第三个子图
ax3.plot(n, np.sin(n))
ax3.set_title("子图3")
# 子图4
ax4=plt.subplot(2,2,4) #两行两列第四个子图
ax4.plot(n, np.sin(n))
ax4.set_title("子图4")plt.tight_layout() #自动调整紧凑布局

# 绘制三个子图
plt.figure(figsize=(8,4))
# 子图1
ax1=plt.subplot(2,2,1) #两行两列第一个子图
ax1.plot(n, np.sin(n))
ax1.set_title("子图1")
# 子图2
ax2=plt.subplot(2,2,2) #两行两列第二个子图
ax2.plot(n, np.sin(n))
ax2.set_title("子图2")
# 子图3
ax3=plt.subplot(2,1,2) #两行一列第三个子图
ax3.plot(n, np.sin(n))
ax3.set_title("子图3")
# plt.subplot(2, 1, 1) 是在 第一行第一列 创建子图,适用于只有一个子图时使用。
# plt.subplot(2, 1, 2) 是在 第二行第一列 创建子图,这样可以确保每个子图在不同的行中显示,不会发生重叠

- **plt.subplots():**一次性构建多个子图
fig, axes=plt.subplots(3,3) #创建一个三行三列的画布
axes1, axes2, axes3=axes
axes1_1, axes1_2, axes1_3=axes1
axes2_1, axes2_2, axes2_3=axes2
axes3_1, axes3_2, axes3_3=axes3
"""
(<Figure size 640x480 with 9 Axes>,array([[<Axes: >, <Axes: >, <Axes: >],[<Axes: >, <Axes: >, <Axes: >],[<Axes: >, <Axes: >, <Axes: >]], dtype=object))
"""
fig.set_figwidth(10)
fig.set_figheight(10)
axes1_1.plot(n, np.sin(n))
axes1_2.plot(n, np.cos(n))
axes1_3.plot(n, np.tan(n))
axes2_1.plot(n, np.sin(n))
axes2_2.plot(n, np.sin(n))
axes2_3.plot(n, np.sin(n))
axes3_1.plot(n, np.sin(n))
axes3_2.plot(n, np.sin(n))
axes3_3.plot(n, np.sin(n))

4.2.2 图形嵌套
- add_subplot(nrows, ncols, index)
fig=plt.figure(figsize=(8,4))
x = np.arange(-2*np.pi, 2*np.pi, 0.1)
y = np.sin(x)
axes1=fig.add_subplot(1,1,1) #画布分为一行一列的第一个子图
axes1.plot(x, y)
axes2=fig.add_subplot(2,2,1) #画布两行两列的第一个子图(左上角:相当于嵌套到子图1中)
axes2.plot(x, y)
Tip:
subplot:在多次调用时,会根据指定的 nrows、ncols 和 index 来“覆盖”前一个子图,图形窗口会被清空并重新绘制。
add_subplot:不会覆盖之前的图形,它是将一个新的子图添加到已有的图形窗口中。

- plt.axes([left, bottom, width, height])
# [left, bottom, width, height]:距左边框的距离,距底边框的距离,宽度,高度
fig=plt.figure(figsize=(8,4))
plt.plot(x, y)
axes=plt.axes([0.5, 0.2, 0.2, 0.2])
axes.plot(x, y)

4.2.3 双轴显示
plt.figure(figsize=(8,3))
axes=plt.gca()#获得当前轴域
plt.plot(x, y)axes2=axes.twinx()#和子图1共用x轴
axes2.plot(x,np.cos(x),c='r')

4.3 绘图属性
- 1.图例:legend()
plt.figure(figsize=(8,3))
x = np.arange(-2*np.pi, 2*np.pi, 0.1)
# 1.通过lable属性标明图例的名字
plt.plot(x, np.sin(x), label='sin')
plt.plot(x, np.cos(x), label='cos')
# 2.通过legend图例属性进行显示
plt.legend()

# legend()的其他属性
plt.figure(figsize=(8,3))
x = np.arange(-2*np.pi, 2*np.pi, 0.1)
# 1.通过lable属性标明图例的名字
plt.plot(x, np.sin(x), label='sin')
plt.plot(x, np.cos(x), label='cos')
# 2.通过legend图例属性进行显示
plt.legend(['sin函数','cos函数'],fontsize=8, #字体大小loc='lower left', #设置位置bbox_to_anchor=[0,1,1,1] #设置具体位置(x,y,width,heigh)
)
- 2.线条属性
"""
c:color 颜色
ls:linestyle样式
lw:linewidth宽度
alpha透明度
marker标记
mfc:markerfacecolor标记的背景颜色
mec:markeredgecolor:标记边框颜色
mew:markeredgewidth:标记边框粗细
"""
plt.figure(figsize=(8,3))
x = np.arange(-2*np.pi, 2*np.pi, 0.1)
plt.plot(x, np.sin(x), label='sin', color='red', linestyle='--', lw=1, marker='o', mfc='g', markeredgecolor='y',alpha=0.5)
plt.plot(x, np.cos(x), label='cos', color='green', linestyle=':', linewidth=2, marker='p', mfc='r', mec='y', mew=2,alpha=1)
plt.legend()

- 3.坐标刻度和坐标范围
plt.xticks()与plt.yticks()设置坐标刻度:
plt.figure(figsize=(8, 3))
x = np.arange(-2*np.pi, 2*np.pi, 0.1)
plt.plot(x, np.sin(x), label='sin', color='red', linestyle='--', lw=1, marker='o', mfc='g', markeredgecolor='y', alpha=0.5)
plt.plot(x, np.cos(x), label='cos', color='green', linestyle=':', linewidth=2, marker='p', mfc='r', mec='y', mew=2, alpha=1)# 设置x轴刻度和标签
plt.xticks(ticks=[-2*np.pi, -np.pi, 0, np.pi, 2*np.pi], # 刻度位置labels=['-2π', '-π', '0', 'π', '2π'], # 替换的刻度标签fontsize=10,color='blue',ha='right' # 水平对齐方式
)
plt.yticks(ticks=[-1, 0, 1])
plt.legend()
plt.show()
plt.xlim()和plt.ylim()或plt.axis()设置坐标的范围
plt.xlim(-10, 10) #x的范围设置为-10~+10
plt.ylim(-2, 2) #y的范围设置为-2~+2
or
plt.axis([-10, 10,-2, 2]) #xmin, xmax, ymin, ymax:同时设置
plt.axis()中有option属性也可以对坐标进行一些特殊操作
'auto':自动调整坐标轴范围。
'equal':确保 x 轴和 y 轴的比例一致。
'off':关闭坐标轴显示。
'tight':紧缩坐标轴范围,紧贴数据边界。
[xmin, xmax, ymin, ymax]:手动指定坐标轴的范围。
'scaled':保持坐标轴的比例一致,适用于不等尺度的情况。
'square':强制坐标轴显示为正方形。
- 4.标题,标签,网格线
#设置标题
plt.title('正弦曲线', loc='center', y=1.1)
plt.suptitle('三角函数的图像', x=0.51, y=1.1) #x,y调整标签的位置
#设置标签
plt.xlabel('sin(x)函数图像')
plt.ylabel('y=sin(x)') #默认rotation角度为90°
plt.ylabel('y=sin(x)', rotation=0, ha='right') #可以通过rotation=0调整水平,ha设置为右对齐
#设置网格
plt.grid(ls='--', lw=1, c='gray', axis='x') #axis可以设置显示哪个轴

- 文本,注释标注
# 文本:plt.text()
plt.figure(figsize=(8, 3))
x = np.arange(0, 2*np.pi, 0.1)
plt.plot(x, np.sin(x))
plt.tight_layout()plt.text(0.5*np.pi-0.2, 0.8, '最高点')
plt.text(x=1.5*np.pi, #文本的横坐标y=-0.8, #文本的纵坐标s='最低点', #文本信息ha='center', #水平居中va='center', #垂直居中color='red' #文本颜色
)

# 注释标注:
plt.figure(figsize=(8, 3))
x = np.arange(0, np.pi, 0.1)
plt.plot(x, np.sin(x))
plt.tight_layout()plt.annotate(text='最高点', # 注释文本为'最高点'xy=(0.5 * np.pi, 1), # 箭头指向坐标(0.5 * np.pi, 1),即图中的最高点xytext=(0.5 * np.pi - 0.2, 0.55), # 注释文本位置稍微偏离箭头arrowprops={ # 配置箭头的样式'width': 1, # 设置箭头的宽度为1'headwidth': 3, # 设置箭头头部的宽度为3'facecolor': 'green' # 设置箭头的颜色为绿色}
)

- 保存图片
fig.savefig('正弦函数.png')
相关文章:
Matplotlib基础01( 基本绘图函数/多图布局/图形嵌套/绘图属性)
Matplotlib基础 Matplotlib是一个用于绘制静态、动态和交互式图表的Python库,广泛应用于数据可视化领域。它是Python中最常用的绘图库之一,提供了多种功能,可以生成高质量的图表。 Matplotlib是数据分析、机器学习等领域数据可视化的重要工…...
SMU寒假训练第二周周报
训练情况 本周是第二周,训练情况比第一周好一点点,也仅仅是好一点点,经过春节以及后遗症,牛客更是打的稀烂,还不如去年,都不知道自己在干嘛,训练赛情况也非常糟糕,还要去搞社会实践…...
解锁全新视界:一键畅享 360 度全景图与多格式转换
软件介绍 各位朋友,大家好!今天要给大家引荐一款超实用的全景图转换“神器”——Pano2VR Pro 的最新版本。在当今这个追求极致视觉体验的时代,它宛如一把神奇的钥匙,能够解锁全新的视觉领域,将平平无奇的不同角度图像…...
python:面向对象案例烤鸡翅
自助烤鸡翅的需求: 1.烤鸡翅的时间和对应的状态: 0-4min :生的 4-7min:半生不熟 7-12min:熟了 12min以上:烤糊了 2.添加调料: 客户根据自己的需求添加 定义烤鸡翅的类、属性和方法,显示对象的信息 …...
游戏外挂原理解析:逆向分析与DLL注入实战(植物大战僵尸
目录 1.前言2.外挂类型3.前置知识4.CE查找基质4.1 逐步分析4.2 暴力搜索5.实现数值外挂6.dll导入表注入7.实现行为外挂(无敌类型)8.源码下载与外挂进阶本篇原文为:游戏外挂原理解析:逆向分析与DLL注入实战(植物大战僵尸)。 更多C++进阶、rust、python、逆向等等教程,可…...
【10.10】队列-设计自助结算系统
一、题目 请设计一个自助结账系统,该系统需要通过一个队列来模拟顾客通过购物车的结算过程,需要实现的功能有: get_max():获取结算商品中的最高价格,如果队列为空,则返回 -1add(value):将价格为…...
android的ViewModel和LiveData 简介
ViewModel ViewModel 的优势 ViewModel 的替代方案是保存要在界面中显示的数据的普通类。在 activity 或 Navigation 目的地之间导航时,这可能会造成问题。此时,如果您不利用保存实例状态机制存储相应数据,系统便会销毁相应数据。ViewModel…...
Linux系统之free命令的基本使用
Linux系统之free命令的基本使用 一、free命令介绍二、free命令的使用帮助2.1 free命令的帮助信息2.2 free命令帮助解释 三、free命令的基本使用3.1 显示内存使用情况3.2 新增总计条目3.3 显示内存详细信息 四、注意事项 一、free命令介绍 free 命令是 Linux 系统中用于显示系统…...
大模型赋能网络安全整体应用流程概述
一、四个阶段概述 安全大模型的应用大致可以分为四个阶段: 阶段一主要基于开源基础模型训练安全垂直领域的模型; 阶段二主要基于阶段一训练出来的安全大模型开展推理优化、蒸馏等工序,从而打造出不同安全场景的专家模型,比如数据安全领域、安全运营领域、调用邮件识别领…...
SpringCloud - Nacos注册/配置中心
前言 该博客为Nacos学习笔记,主要目的是为了帮助后期快速复习使用 学习视频:7小快速通关SpringCloud 辅助文档:SpringCloud快速通关 一、简介 Nacos官网:https://nacos.io/docs/next/quickstart/quick-start/ Nacos /nɑ:kəʊ…...
面试准备——Java理论高级【笔试,面试的核心重点】
集合框架 Java集合框架是面试中的重中之重,尤其是对List、Set、Map的实现类及其底层原理的考察。 1. List ArrayList: 底层是动态数组,支持随机访问(通过索引),时间复杂度为O(1)。插入和删除元素时&#…...
AI伴读-清华大学104页《DeepSeek:从入门到精通》
辅助工具:deepseek、豆包AI伴读 官网:DeepSeekDeepSeek, unravel the mystery of AGI with curiosity. Answer the essential question with long-termism.https://www.deepseek.com/https://www.deepseek.com/清华大学104页《DeepSeek:从入…...
unity学习34:角色相关3,触发器trigger,铰链 hingejoint 等 spring joint, fixed joint
目录 1 触发的实现条件 1.1 碰撞的的实现条件 1.2 触发的实现条件 1.3 触发器trigger,直接拿 碰撞器collider修改下配置即可 2 触发器相关实验:触发开门效果 2.0 目标 2.1 player物体的属性 2.2 新建一个trigger 物体 2.3 新建一个被trigger 控…...
HarmonyOS Next 方舟字节码文件格式介绍
在开发中,可读的编程语言要编译成二进制的字节码格式才能被机器识别。在HarmonyOS Next开发中,arkts会编译成方舟字节码。方舟字节码长什么样呢?我们以一个demo编译出的abc文件: 二进制就是长这样,怎么去理解呢&…...
计算机视觉语义分割——Attention U-Net(Learning Where to Look for the Pancreas)
计算机视觉语义分割——Attention U-Net(Learning Where to Look for the Pancreas) 文章目录 计算机视觉语义分割——Attention U-Net(Learning Where to Look for the Pancreas)摘要Abstract一、Attention U-Net1. 基本思想2. Attention Gate模块3. 软注意力与硬注意力4. 实验…...
html 列动态布局
样式说明: /* 列动态布局,列之间以空格填充 */ li {display: flex;/* flex-direction: column; */justify-content: space-between; }...
DeepSeek开源多模态大模型Janus-Pro部署
DeepSeek多模态大模型部署 请自行根据电脑配置选择合适环境配置安装conda以及gitJanus 项目以及依赖安装运行cpu运行gpu运行 进入ui界面 请自行根据电脑配置选择合适 本人家用电脑为1060,因此部署的7B模型。配置高的可以考虑更大参数的模型。 环境配置 安装conda…...
DeepSeek结合Langchain的基本用法
DeepSeek结合Langchain的基本用法 DeepSeek 基于Openai接口规范的Prompt应答Deepseek结合LangchainDeepSeek 基于langchain的结构化返回 DeepSeek 基于Openai接口规范的Prompt应答 首先我们需要先基于pip 安装 pip install openai最开始我们先熟悉如何使用openai的接口规范&a…...
Redis持久化的两种方式:RDB和AOF
redis中的数据存储在缓存中,如果没有持久化的策略,Redis一旦宕机,那么将会导致数据丢失;因此redis提供了以下两种持久化方式:RDB和AOF 一般来说,大部分公司对这两种方式都是同时开启的 一、RDB RDB策略全…...
每日一题——131.分割回文串
题目链接:131. 分割回文串 - 力扣(LeetCode) 代码: class Solution { private:vector<vector<string>> result;vector<string> path;void backtracking (const string& s,int startindex){if(startindex …...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
uniapp手机号一键登录保姆级教程(包含前端和后端)
目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号(第三种)后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...
Golang——6、指针和结构体
指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...
CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!
本文介绍了一种名为AnomalyAny的创新框架,该方法利用Stable Diffusion的强大生成能力,仅需单个正常样本和文本描述,即可生成逼真且多样化的异常样本,有效解决了视觉异常检测中异常样本稀缺的难题,为工业质检、医疗影像…...
