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() #自动调整紧凑布局

image-20250204164644431

# 绘制三个子图
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) 是在 第二行第一列 创建子图,这样可以确保每个子图在不同的行中显示,不会发生重叠

image-20250204164829084

  • **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))

image-20250204164922764

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:不会覆盖之前的图形,它是将一个新的子图添加到已有的图形窗口中。

image-20250204170323880

  • 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)

image-20250204170813309

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')

image-20250204171420469

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()

image-20250204172723266

# 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()

image-20250204175730184

  • 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可以设置显示哪个轴

image-20250204184030840

  • 文本,注释标注
# 文本: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' #文本颜色
)

image-20250205101245615

# 注释标注:
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'  # 设置箭头的颜色为绿色
    }
)

image-20250205101912260

  • 保存图片
fig.savefig('正弦函数.png')

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

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

相关文章

六种负载均衡算法

六种负载均衡算法对比&#xff1a;原理、优缺点及适用场景 负载均衡是分布式系统的核心技术之一&#xff0c;通过合理分配请求流量&#xff0c;确保服务器资源高效利用&#xff0c;提升系统的可用性和响应速度。不同的负载均衡算法适用于不同的场景&#xff0c;以下是六种常见…

公司配置内网穿透方法笔记

一、目的 公司内部有局域网&#xff0c;局域网上有ftp服务器&#xff0c;有windows桌面服务器&#xff1b; 在内网环境下&#xff0c;是可以访问ftp服务器以及用远程桌面登录windows桌面服务器的&#xff1b; 现在想居家办公时&#xff0c;也能访问到公司内网的ftp服务器和win…

Citespace之关键词爆发检测分析(进阶分析)

在开始citespace进行关键词爆发检测分析之前&#xff0c;如果不会使用citespace的&#xff0c;可以参考我之前这一篇博客&#xff1a; https://blog.csdn.net/m0_56184997/article/details/145536095?spm1001.2014.3001.5501 一、创建工程后进行设置 在创建好工程后&#xf…

【文献讲解】《Non-local Neural Networks》

一、引言 传统的深度学习方法(如卷积神经网络CNN和循环神经网络RNN)在捕捉长距离依赖关系时存在局限性。CNN主要关注局部邻域的特征,而RNN则依赖于序列的递归计算,无法直接捕捉全局信息。为了解决这一问题,本文提出了一种非局部神经网络(Non-local Neural Networks),通…

基于 Spring Cloud + Spring AI + VUE 的知识助理平台介绍以及问题

前言&#xff08;一些废话&#xff09; 在看这篇文章的各位大佬&#xff0c;感谢你们留出几分钟时间&#xff0c;来看这个产品介绍&#xff0c;其实重点说实话&#xff0c;不是这个产品怎么样。而是在最后有一个郁结在心里的几个问题&#xff0c;希望大佬们能给出一些建议。万…

IDEA安装离线插件(目前提供了MavenHelper安装包)

目录 1、离线安装方式2、Maven Helper 1、离线安装方式 首先访问 IDEA插件网站 下载离线插件安装包&#xff0c;操作如下&#xff1a; 然后打开IDEA的Settings配置&#xff0c;点击Plugins&#xff0c;点击右侧设置按钮&#xff08;齿轮&#xff09;&#xff0c;选择Install P…

JVM的性能优化

1.方法内联 方法内联,是指 JVM在运行时将调用次数达到一定阈值的方法调用替换为方法体本身 ,从而消除调用成本,并为接下来进一步的代码性能优化提供基础,是JVM的一个重要优化手段之一。 注: C++的inline属于编译后内联,但是java是运行时内联 简单通俗的讲就是把方法内部调…

蓝桥杯小白打卡第四天

1221. 四平方和 问题描述 四平方和定理&#xff0c;又称为拉格朗日定理&#xff1a;每个正整数都可以表示为至多 4 个正整数的平方和。如果把 0 包括进去&#xff0c;就正好可以表示为 4 个数的平方和。 例如&#xff1a; (5 0^2 0^2 1^2 2^2)(7 1^2 1^2 1^2 2^2) …

【kafka系列】Topic 与 Partition

Kafka 的 Topic&#xff08;主题&#xff09; 和 Partition&#xff08;分区&#xff09; 是数据组织的核心概念&#xff0c;它们的映射关系及在 Broker 上的分布直接影响 Kafka 的性能、扩展性和容错能力。以下是详细解析&#xff1a; 一、Topic 与 Partition 的映射关系 Top…

哈佛大学“零点项目”(Project Zero)简介

哈佛大学“零点项目”&#xff08;Project Zero&#xff09;简介 起源与背景 “零点项目”&#xff08;Project Zero&#xff09;由美国哲学家纳尔逊古德曼&#xff08;Nelson Goodman&#xff09;于1967年在哈佛大学教育研究院创立。名称源于“从零开始研究艺术教育”的理念&…

【Java基础】为什么不支持多重继承?方法重载和方法重写之间区别、Exception 和 Error 区别?

Hi~&#xff01;这里是奋斗的明志&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f331;&#x1f331;个人主页&#xff1a;奋斗的明志 &#x1f331;&#x1f331;所属专栏&#xff1a;Java基础面经 &#x1f4da;本系列文章为个…

rebase和merge

rebase 和merge区别&#xff1a; rebase变基&#xff0c;改变基底&#xff1a;rebase会抹去提交记录。 git pull 默认merge&#xff0c;git pull --rebase 变基 rebase C、D提交属于feature分支&#xff0c;是基于master分支&#xff0c;在B提交额外拉出来的&#xff0c;当…

科研工作中如何高效利用LabVIEW

LabVIEW作为图形化编程语言&#xff0c;在科研领域广泛应用于数据采集、自动控制、信号处理等任务。如何充分发挥其优势&#xff0c;提高实验效率和数据可靠性&#xff0c;是科研工作者需要重点关注的问题。本文从软件架构、硬件选型、数据处理、调试优化等方面详细探讨LabVIEW…

MybatisPlus整合druid多数据源

1.引入依赖&#xff1a; <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.2.0</version> </dependency><dependency><groupId>com.baomidou</gro…

实验6 客户端和服务器之间IPsec VPN配置

实验6 客户端和服务器之间IPsec VPN配置 1.实验目的 通过在两台计算机间或客户端与服务器之间配置IPsec VPN连接&#xff0c;掌握IPsec VPN配置方法&#xff0c;加深对IPsec协议的理解。 2.实验内容 &#xff08;1&#xff09;在Windows Server系统中配置VPN服务器。 &#xf…

VirtualBox中Ubuntu 22.04网卡配置以及解决过程中遇到的问题

1.添加网卡(仅主机) 2.启动虚拟机&#xff0c;查看新添加网卡信息 #查看网卡 ip addr # 查看网络信息&#xff0c;发现新网卡(enp0s8)未分配 ifconfig -a3.使用netplan进行网络配置 3.1 配置 DHCP获取IP # 进入netplan 文件夹 cd /etc/netplan #查看文件夹下yaml ls -al # 编…

上拉触底案例

1.什么是上拉触底 2. 修改上拉触底距离的默认值 3.上拉触底案例 上拉触底时获取随机颜色 4.添加loading效果 展示loading效果 隐藏loading效果 5.节流处理 进行节流处理&#xff0c;防止多次触底的时候&#xff0c;一次请求多页数据&#xff0c;正在请求下一页数据的时…

AES200物理机部署DeepSeek-R1蒸馏模型

AES200物理机部署DeepSeek-R1模型 华为官方官宣自己的NPU支持DeepSeek-R1模型部署&#xff0c;华为的大模型推理部署依托于其大模型推理引擎&#xff1a;MindIE&#xff0c;但是根据MindIE的文档&#xff0c;其只支持以下硬件&#xff1a; 表1 MindIE支持的硬件列表 类型配置…

2025年软件测试五大趋势:AI、API安全、云测试等前沿实践

随着软件开发的不断进步&#xff0c;测试方法也在演变。企业需要紧跟新兴趋势&#xff0c;以提升软件质量、提高测试效率&#xff0c;并确保安全性&#xff0c;在竞争激烈的技术环境中保持领先地位。本文将深入探讨2025年最值得关注的五大软件测试趋势。 Parasoft下载https://…

w200基于spring boot的个人博客系统的设计与实现

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;原创团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文…