Matplotlib教程一

news2024/11/18 19:53:36

文章目录

  • 一.简介
  • 二.Mapltlib的简单使用
    • 2.1 Pylot的API
    • 2.2 Pylab模块
    • 2.3 matplotlib简单绘图
  • 三.Mapltlib进阶使用
    • 3.1 面向对象思想画图
    • 3.2 Figure类
    • 3.3 Axes类
    • 3.4 画布上创建多个子图
    • 3.5 图中添加网格
    • 3.6 设置图片轴线
    • 3.7 保存图片

一.简介

matplotlib是最初由John D.Hunter于2003年编写,是用于数据可视化的最流行的Python包之一,它是一个跨平台,用于根据数组中的数据制作2D图。Matplotlib是用Python编写的,并使用了Python的数值数学扩展Numpy,它提供了一个面向对象的API,有助于使用Python GUI工具包(如PyQt,WxPythonTkinter)在应用程序中嵌入绘图。它也可以使用Python和IPython Shell,jupyter笔记本和Web应用程序服务器。Matplotlib和Numpy可以被认为是Matlab的开源等价物。

二.Mapltlib的简单使用

2.1 Pylot的API

Matplotlib.pylot是命令样式函数的集合,使Matplotlib像MatLab一样工作,每个Pylot功能都会对图像进行一些更改。例如,函数创建一个图形,一个图形中的绘画区域,绘制绘图区域中的一些线条,用标签装饰图形等。

函数描述
Bar绘制柱状图
Barh绘制水平柱状图
Boxplot绘制一个箱形图
Hist绘制直方图
hist2d绘制2D直方图
Pie绘制饼图
Plot绘制轴线或标记
Polar绘制一个极坐标图
Scatter绘制x和y的散点图
Stackplot绘制堆积区域图
Stem绘制杆图
Step绘制步骤图
Quiver绘制二维箭头字段

图形函数

函数描述
Imread在文件中的图像读入数组
Imsave像在图形文件中一样保存数组
Imshow在轴上显示图像

轴函数

函数描述
Axes添加轴到图形
Text向轴中添加文本
Title设置当前轴的标题
Xlabel设置当前轴的X轴标签
Xlim获取或设置当前轴的x的限制
Xscale设置x轴的缩放比例
Xticks获取或设置当前刻度位置和标签的X限制
Ylabel设置当前轴的y轴标签
Ylim获取或设置当前轴的y的限制
Yscale设置y轴的缩放比例
Yticks获取或设置当前刻度位置和标签的y限制

图形操作函数

函数描述
Figtext将文字添加到图形
Figure创建一个新的图形
Show显示一个图形
Savefig保存当前图形
Close关闭一个图窗口

2.2 Pylab模块

matplotlib是整个包,Matplotlib.pylot是Matplotlib中的一个模块,它和PyLab是一个与Matplotlib一起安装的模型。PyLab是Matplotlib面向对象绘图库的过程接口,是一个非常方便的模块,可以单个名称空间中批量导入matplotlib.pyplot和Numpy。(不推荐使用)

  1. 基本绘图
import numpy as np
import pylab as plb

x=np.linspace(-3,3,30)
y=x**2
plb.plot(x,y,'r1')#r1是线的颜色和样式
plb.show()

在这里插入图片描述
线的颜色和样式
颜色:b,g,r,c,m,y,k,w
符号:^,v,<,>,s,+,x,D,d,1,2,3,4,h,H,p,|,_,-,--,-.,.,,,。

  1. 使用多个绘图命令实现覆盖图
import numpy as np
import pylab as plb

x=np.linspace(-3,3,30)
plb.plot(x,np.sin(x))
plb.plot(x,np.cos(x),'r--')
plb.plot(x,-np.sin(x),'g-')
#plb.clf()可以清除图片
plb.show()

在这里插入图片描述

2.3 matplotlib简单绘图

显示一个简单的角度线图,以弧度为单位,与正弦值相对应

import numpy  as np
import math
import matplotlib.pyplot as plt

%matplotlib inline
x=np.arange(0,math.pi*2,0.05)
y=np.sin(x)

plt.rcParams["font.size"]=15 #设置图整体字体大小(包括轴数字等)
plt.title("sine wave")
plt.xlabel("angle",color='r',fontsize=20)#fontsize设置字大小
plt.ylabel("值",color='b',fontsize=20,rotation=0) #可以让文本旋转0度(保存水平)
plt.plot(x,y)

在这里插入图片描述

三.Mapltlib进阶使用

3.1 面向对象思想画图

虽然使用Matplotlib.pylot模块很容易生成绘图,但建议使用面向对象的方法,因为它可以更好地控制和自定义绘图,并且matplotlib.axes.Axes类中也提供了大多数函数。使用更正式的面向对象方法背后的主要思想是创建图形对象,然后只调用该对象的方法或属性,这种方法有助于更好地处理其上有多个绘图的画布。在面向对象中pylot仅用于一些功能,如图形创建,用户显式创建和跟踪图形或轴对象。在此级别,用户使用pylot创建图形,通过这些图形,可以创建一个或多个轴对象。然后,这些轴对象用于大多数绘图操作。

3.2 Figure类

它是定义在Matplotlib.figure下,模块保护Figure类,它是所有plot元素的顶级容器,通过pylot模块调用figure()函数来实例话Figure对象

figure()函数参数描述
Figsize(width,height)以英寸为单元的元组,表示画布的尺寸
Dpi每英寸点数
Facecolor图的贴面颜色
Edegecolor图的边缘颜色
Linewidth边线宽度

3.3 Axes类

Figure对象我们可以理解为画纸,Axes对象具有数据空间的图像区域(相当于纸上画的一张图,一个画布可以有多张图)。给定的图形可以包含很多轴,但给定的Axes对象只能在一个图中。轴包含两个(或在3D情况下为3个)Axes对象。Axes类及其成员函数是使用面向对象接口的主要入口点。figure对象通过调用add_axes()方法将Axes对象添加到图中,它返回轴对象并在位置rect[left,bottom,width,height]地点添加一个轴,其中所有数量都是图形宽度和高度的分数,add_axes()的参数是4个长度序列的[左,底,宽,高]数量。轴类的以下成员函数为图添加了不同的元素。

fig=plt.figure() #可以理解为画纸
x=np.arange(0,math.pi*2,0.05)
y=np.sin(x)
z=np.cos(x)
ax=fig.add_axes([0,0,1,1])
ax1=fig.add_axes([1.3,0,1,1])
ax.plot(x,y)
ax.set_title("正弦函数")
ax.set_xlabel("sine wave")
ax.set_ylabel("sine")
ax1.plot(x,z)
ax1.set_title("余弦函数")
ax1.set_xlabel("cose wave")
ax1.set_ylabel("cose")
plt.show()

在这里插入图片描述
axes.legend()
为绘图图形添加一个图例(对图像曲线的一个说明)

参数说明
lables描述
loc图例位置
loc位置简介位置代码
best0
upper right1
upper light2
lower left3
lower right4
right5
center left6
center right7
lower center8
upper center9
center10

ax.plot()
这是轴类的基本方法,他将一个数组的值与另一个数组的值绘制为线或标记
axes.plot(*args,scalex=True,scaley=True,data=None,**kwargs)
axes.plot([x],y,[fmt],*,data=None,**kwargs)
axes.plot([x],y,[fmt],[x2],y2,[fmt2],...,**kwargs)

属性说明
color颜色
alpha透明度
linestyle/ls线型
linewidth/ls线宽
marker点类型
markersize点大小
markeredgewidth点边缘宽度
markeredgecolor点边缘颜色
markerfacecolor点内部颜色
fmt颜色代码字符标记颜色
bblue
ggreen
rred
ccyan
mmagenta
yyellow
kblack
wwhite
fmt标记代码字符颜色描述
.点标记
像素标记
o圆形标记
v朝下的三角形
^朝上的三角形
<朝左的三角形
>朝右的三角形
s正方形
p五角星
*星形
h1号六角形
H2号六角形
++号标记
D砖石形
d小砖石形
|垂直线形
-水平线形
fmt线条样式字符描述
-实线
虚线
-.单点划线
:点虚线
y=[1,4,9,16,25,36,49,64]
x1=[1,16,30,42,55,68,77,88]
x2=[1,6,12,18,28,40,52,65]
fig=plt.figure(figsize=(10,5))
ax=fig.add_axes([0,0,1,1])
ax.plot(x1,y,alpha=0.2,linestyle="-.",lw=3,color='g',marker='s',markersize=10,markeredgewidth=5,markeredgecolor='r')
ax.plot(x2,y,'rs--')#''中间就是fmt参数
ax.legend(labels=("television,'phone'"),loc=2)

在这里插入图片描述

3.4 画布上创建多个子图

3.3给出了画两张图的方法,通过设立每个axes对象与画布边缘的距离,以及axes对象的宽度和高度来生成多张图,显然这个很麻烦的,因为需要自己去规划画布的每一块位置(这个方法叫做添加轴对象方法)

plt.subplot(nrows,ncols,index)
返回给定网格位置的axes对象

这个函数将画布分割成几个位置,nrows行,ncols列就表示在画布上沿行切(nrows-1)刀,再沿着列切(ncols-1)刀,这样就可以将画布分割成多个子区域,再使用index来选择子画布区域位置

fig=plt.figure(figsize=(12,6))#创建画布
ax1=plt.subplot(2,2,1)
ax1.plot(range(12))
ax1=plt.subplot(222,facecolor='y')
ax1.plot(range(12))
ax1=plt.subplot(223,facecolor='r')
ax1.plot(range(12))
ax1=plt.subplot(224,facecolor='b')
ax1.plot(range(12))
plt.show()

在这里插入图片描述
plt.subplots(nrows,ncols)
它充当使用程序包装器,并在单个调用中帮助创建子图的公共布局,包括封闭的图形对象。该函数返回一个图形对象和一个包含nrows*ncols的轴对象的元组,每个轴都可以通过索引来访问(这个函数和前面subplot区别就是不是通过index来确定子画图区域的位置,而是在创建子画布时就已经给每个子区域创建好了axes对象,返回的就是axes对象,若我们要使用子画布,只需要调用相应位置的axes对象即可直接画图)

fig,axList=plt.subplots(2,2)
axList[0][0].plot(range(12),color='r')
axList[0][1].plot(range(12),color='b')
axList[1][0].plot(range(12),color='y')
axList[1][1].plot(range(12))
plt.show()

在这里插入图片描述
subplot2grid()
该方法在网格的特定的位置创建轴对象提供了更大的灵活,甚至还允许多个轴对象占多个行或列(即允许一个图占画布的多个子区域,前面的两个方法一个图只能占一个区域,这个方法让画布上图的分布更加的随意)

fig=plt.figure(figsize=(12,6))#创建画布
ax1=plt.subplot2grid((3,3),(0,0),colspan=2,rowspan=1)#(3,3)表示三行三列,(0,0)指的是0行0列,colspan表示该图占两列,rowspan表示占1行
ax2=plt.subplot2grid((3,3),(0,2),colspan=1,rowspan=3)
ax3=plt.subplot2grid((3,3),(1,0),colspan=2,rowspan=2)
x=np.arange(1,10)
ax1.plot(x,np.exp(x))
ax1.set_title("square root")
ax3.plot(x,np.log(x))
ax3.set_title("log")
ax2.plot(x,x*x)
ax2.set_title("quare")

在这里插入图片描述
figure.add_subplot()
实现添加子图

fig=plt.figure()
x=np.arange(1,math.pi*2,0.05)
ax1=fig.add_subplot(111) #1行1列下标为1
ax1.plot(x,np.sin(x))
ax2=fig.add_subplot(222,facecolor='r')
ax2.plot(x,np.cos(x),'b')

在这里插入图片描述

3.5 图中添加网格

axes对象的grid函数将图中网格的可见性设置为on或off。还可以显示网格的主要/次要刻度,还可以在grid()里面设置color,linestyle和linewidth属性

fig=plt.figure()
ax1=fig.add_axes([0,0,1,1])
x=np.arange(1,math.pi*2,0.05)
ax1.grid(color='r',ls='-',lw=0.3)
ax1.plot(x,np.cos(x))

在这里插入图片描述

3.6 设置图片轴线

轴线就是一张图的四个边,每个轴线可以指定颜色和宽度,设置颜色为无可以忽略轴线

fig=plt.figure()
ax1=fig.add_axes([0,0,1,1])
x=np.arange(1,math.pi*2,0.05)
ax1.grid(color='r',ls='-',lw=0.3)
ax1.plot(x,np.cos(x))
ax1.spines['bottom'].set_color("k") #拿到下轴线
ax1.spines['left'].set_color("blue")
ax1.spines['left'].set_linewidth(4)
ax1.spines['right'].set_color(None)
ax1.spines['top'].set_color(None)

在这里插入图片描述

  1. 格式化轴
    有时候一个或几个点比大量数据大得多,在这种情况下,轴的比例需要设置为对数而不是正常比例。这种对数标度在Matplotlib中可以通过axes对象的xscale或vscale属性设置为log,有时还需要在轴编号和轴标签之间显示一些额外的距离,任一轴(x或y或两者)的labelpad属性都可以设置为所需的值。
fig,axes=plt.subplots(1,2,figsize=(10,4))
x=np.arange(1,6)
axes[0].plot(x,np.exp(x))
axes[0].plot(x,x*x)
axes[0].set_xlabel("x axis")
axes[1].plot(x,np.exp(x))
axes[1].plot(x,x*x)
axes[1].set_xlabel("x axis")
axes[1].set_yscale("log")
axes[1].xaxis.labelpad=30  #x_label与坐标轴之间的距离
plt.show()

在这里插入图片描述
2. 设置限制
将x轴上的大小格式为(0到10)和y轴(0到10000)

fig,axes=plt.subplots(1,2,figsize=(10,4))
x=np.arange(1,11)
y=np.exp(x)
axes[0].plot(x,y)
axes[1].plot(x,y)
axes[1].set_xlim(0,8) #设置x的刻度范围为0-8
axes[1].set_ylim(0,10000)#设置y的刻度范围为0-10000

在这里插入图片描述
3. 设置刻度和刻度标签
刻度是表示轴上的数据点的标记,到目前为止matplotlib在我们之前的所有例子都自动接管了轴上间隔点的任务。matplotlib的默认刻度定位器和格式化器 在很多常见的情况下通常都够用了。也可以明确提及刻度线的位置和标签以满足特定的要求
xticks()yticks()
作用:将列表对象作为参数,列表中的元素表示将显示刻度的相应操作的位置
set_xlabels()set_ylabels()
设置刻度线的标签

fig,axes=plt.subplots(1,2,figsize=(14,4))
x=np.arange(1,math.pi*2,0.05)
y=np.sin(x)
axes[0].plot(x,y)
axes[1].plot(x,y)
axes[1].set_xticks([0,2,4,6])
axes[1].set_xticklabels(["zero","tow","four","six"])  #给x轴刻度起别名,数量要和x刻度的数量对应
plt.show()

在这里插入图片描述
4. 设置轴线类型
常用类型:tight off equal

fig,axes=plt.subplots(1,2,figsize=(14,4))
x=np.linspace(-1,1,100)
y=lambda x:(1-x**2)**0.5 #lambda函数
axes[0].plot(x,y(x))
axes[0].plot(x,-y(x)) #由于x轴和y轴长度不等值,所以画出来的圆不圆

axes[1].plot(x,y(x))
axes[1].plot(x,-y(x)) 
axes[1].axis("equal")
axes[1].axis("off") #关闭轴线

在这里插入图片描述

3.7 保存图片

savefig(fname,dipi=None,facecolor='w',edgecolor='w',orientation='portrait',papertype=None,format=None,transparent=False,bbox_inches=None,pad_inches=0.1,frameon=None,metadata=None)

常用参数说明
fname含有文件路径的字符串或python的文件型对象。图像格式由文件扩展名推断得出,例如,.pdf推断出pdf,.png推断出PNG
dpi图像分辨率
facecolor图像的背景色,默认为w白色
fig,axes=plt.subplots(1,2,figsize=(14,4))
x=np.linspace(-1,1,100)
y=lambda x:(1-x**2)**0.5 #lambda函数
axes[0].plot(x,y(x))
axes[0].plot(x,-y(x)) #由于x轴和y轴长度不等值,所以画出来的圆不圆

axes[1].plot(x,y(x))
axes[1].plot(x,-y(x)) 
axes[1].axis("equal")
axes[1].axis("off") #关闭轴线

fig.savefig("circle.jpg",dpi=200,facecolor='b')

在这里插入图片描述

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

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

相关文章

Shell脚本编程(一) —— 变量定义(用户自定义变量、位置变量、预定义变量、环境变量)

目录 1、用户自定义变量 2、位置变量 3、预定义变量 4、环境变量&#xff08;一次性全局变量&#xff09; 5、永久全局变量&#xff08;重启以后依然存在的变量&#xff09; (1) 本地变量文件 (2) 全局变量文件 1、用户自定义变量 定义变量&#xff1a; 变量名value …

九、propTypes验证

目标 理解类型验证的必要性 灵活掌握类型验证的使用 知识点 在给react组件传属性的的时候&#xff0c;我们可以定义属性的类型&#xff0c;此时我们需要下载prop-types这个库。 安装prop-types npm install prop-types -S引入和使用 import PropTypes from prop-types;cla…

winform语言切换C#设计笔记(八)

一、修改当前区域性 string languageName“zh-CN”; Thread.CurrentThread.CurrentUICulture new CultureInfo(languageName); 二、定义语言切换类Mullanguage或方法如下&#xff1a; private static Dictionary<string, ResourceManager> ResManagerDic new Dictionar…

【ESP32_8266_WiFi (十五)】ESP8266 OTA 操作说明

文章目录ESP8266 OTA 操作说明1 通过数据线上传初始示例程序2 通过Arduino IDE正确选择OTA端口3 认证并上传程序4 OTA的局限性ESP8266 OTA 操作说明 所谓OTA&#xff0c;就是Over-The-Air的缩写。有人将其翻译为“空中下载”&#xff0c;也有翻译为“隔空传输”。无论如何翻译…

Java高并发编程卷二(二) 锁

文章目录三 锁3.1 偏向锁3.1.1 为啥需要偏向锁&#xff1f;3.1.2 原理3.1.3 解释3.1.4 案例3.1.5 撤销与膨胀3.1.5.1 撤销3.1.5.2 膨胀3.2 轻量级锁3.2.1 为啥需要轻量级锁&#xff1f;3.2.2 原理3.2.3 案例3.2.4 分类3.2.5 膨胀3.3 重量级锁3.3.1 原理3.3.2 对象监视器详细介绍…

zookeeper学习笔记

zookeeper学习笔记1.Zookeeper概念2.Zookeeper命令操作2.1数据模型2.1.1数据结构2.1.2节点类型2.2服务端命令2.3客户端命令-基本命令2.4客户端命令-高级点命令3.Zookeeper JavaAPI操作3.1Cutor介绍3.2Cutor API常用操作-增删改查3.2.1建立连接3.2.2创建节点3.2.3删除节点3.2.4修…

js 回到顶部逻辑实现和elementUI源码解析

回到顶部 大家或多或少都会遇到“回到顶部”这样的需求&#xff0c;在此分享这个技术点以及可能遇到的问题。再分析element源码。 回到顶部代码实现 <!DOCTYPE html><html lang"en"><head><meta charset"UTF-8"><meta http-…

基于PHP+MySQL的个人博客系统毕设

随着时代和网络的发展,人们越来越希望通过多种模式来展示自己。于是个人博客就出现了,它可以更好的让人们来记录自己的工作和学习方式。博客不仅仅可以让自己抒发个人感情,还可以展示自己真实的生活,从而建立起一种友好的交友平台。 PHP个人博客系统毕设系统分为前台和后台两部…

Python每日一练 02

Python每日一练 02 文章目录Python每日一练 02一、对象二、对象属性三、赋值一、对象 Python中所有数字、序列、集合、映射、类、实例、异常、模块、类与类的实例、函数、方法、布尔值、空值等都被称为对象。 二、对象属性 每个对象都有3个基本属性&#xff1a; 类型(type)…

Flink-源算子Source(获取数据源)的使用

5.1 整体介绍 获取执行环境读取数据源定义基于数据的转换操作定义计算结果的输出位置触发程序执行 5.2 创建集成环境 5.2.1 获取执行环境 批处理getExecutionEnvironment 提交命令行设置 bin/flink run -Dexecution.runtime-modeBATCH ...代码 StreamExecutionEnvironme…

pip Command Not Found – Mac 和 Linux 错误被解决

使用Python时&#xff0c;可能需要安装和使用某些软件包。有一个命令可用于’pip‘ 使用pip&#xff0c;您可以安装、升级和卸载各种Python包。在本文中&#xff0c;您将学习如何使用它&#xff0c;以及如何处理pip错误。 如何使用 pip Pip是一个可以在Linux或Mac命令行上使用…

HTTP(http+抓包Fiddler+协议格式+请求+响应)

目录 &#x1f984;1. 了解HTTP &#x1f984;2. 抓包 &#x1f984;3. http协议格式 &#x1f432;3.1 完整的HTTP请求格式 &#x1f432;3.2 完整的HTTP响应的格式 HTTP请求 &#x1f984;4. 认识URL &#x1f984;5. http中的"方法" &#x1f432;5.1…

智能与工程学院2022级计算机朱元华

智能与工程学院 《高级语言程序设计》 小组学习任务书 第 1 次 专业年级&#xff1a; 2022级计算机 指导教师&#xff1a; 朱元华 2022-2023学年 第 1 学期 一、任务 XXX信息管理系统的需求分析和功能设计 二、分组形式 学生自由组合&#xff0c;5-8人为一组&#xff0c;根据…

Tuxera NTFS2023Mac读写ntfs磁盘工具

Tuxera Ntfs for mac2023是Mac中专用于读写外置存储的工具&#xff0c;具有强大的磁盘管理和修复功能&#xff0c;它在Mac上完全读写NTFS格式硬盘&#xff0c;快捷的访问、编辑、存储和传输文件。能够在 Mac 上读写 Windows NTFS 文件系统。Tuxera NTFS 实现在Mac OS X系统读写…

【Spring】——6、按照条件向Spring容器中注册bean

&#x1f4eb;作者简介&#xff1a;zhz小白 公众号&#xff1a;小白的Java进阶之路 专业技能&#xff1a; 1、Java基础&#xff0c;并精通多线程的开发&#xff0c;熟悉JVM原理 2、熟悉Java基础&#xff0c;并精通多线程的开发&#xff0c;熟悉JVM原理&#xff0c;具备⼀定的线…

静态时序分析简明教程(六)]时钟组与其他时钟特性

生成时钟的sdc约束方法一、写在前面1.1 快速导航链接二、时钟组2.1 引入时钟组2.2 set_clock_group2.2.1 -name2.2.2 -group clock_list2.2.3 -logically_exclusive|-physically_exclusive|-asynchronous2.2.4 -allow_path2.2.5 -comment三、其他时钟特性3.1 过渡时间3.2 偏移与…

【Linux】进程间通信——管道

目录 一、概念 二、管道函数 1.popen函数 2.pclose函数 3.文件函数 三、管道的操作 1.管道的分类 无名管道 有名管道 管道的特点 四、管道的实现 操作系统对进程之间相互保护 两个进程之间相互通信 前言&#xff1a; 进程间通信的方法/IPC机制都有哪些&#xff1a; …

求二进制中1的个数的三种方法

求二进制中的1的个数 文章目录第一种方法&#xff1a;模2除2第二种方法&#xff1a;利用操作符右移后与1第三种方法&#xff1a;该数与上比它小1的数&#xff08;最优的方法&#xff09;第一种方法&#xff1a;模2除2 首先明白如何得到一个数的十进制的每一位&#xff1f; 以1…

PHP代码审计入门-DVWA靶场CSRF篇

0x00 写在前面 从零学习php&#xff0c;最终目的实现代码审计入门&#xff0c;软件采用sublime text&#xff0c;环境使用phpstudy搭建&#xff0c;数据库是navicat&#xff0c;需要有基本的前端基础、简单的phpmysql后端基础、渗透知识和漏洞原理&#xff0c;文章跟随流沙前…

bizlog通用操作日志组件(使用篇)

引言 如上图所示&#xff0c;产品的新需求&#xff0c;需要将操作人在系统中具体编辑操作的变更内容记录下来。 按正常思路来说&#xff0c;无非就是将修改前后的对象字段逐个比较&#xff0c;再拼接为详细的操作描述记录到操作日志表中。如果是一个模块的需求&#xff0c;单独…