Matplotlib教程一

编程入门 行业动态 更新时间:2024-10-11 19:22:55

Matplotlib<a href=https://www.elefans.com/category/jswz/34/1771193.html style=教程一"/>

Matplotlib教程一

文章目录

  • 一.简介
  • 二.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 plbx=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 plbx=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')

更多推荐

Matplotlib教程一

本文发布于:2024-03-04 16:33:37,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1709799.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:教程   Matplotlib

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!