Matplotlib系列(四):二维绘图_matplotlib中二维图指什么-程序员宅基地

技术标签: python  plot  matplotlib  Python科学计算和数据分析  

Matplotlib系列目录



一、 简介

‎matplotlib对在二维图绘图方面非常强大,除了散点图、曲线图、柱状图、饼图等基本图形外,还支持辅助直线、二维标量场、矢量场、统计绘图、非结构三角网格绘图以及信号谱分析。

Matplotlib系列将Matplotlib的知识和重点API,编制成思维导图和重点笔记形式,方便记忆和回顾,也方便应用时参考,初学者也可以参考逐步深入学习。

二、 思维导图

matplotlib二维绘图


三、 Matplotlib二维图形

1. 基本图形

每个绘图函数都有很多设置线条、点、颜色的参数,建议日常绘图时,更多的使用plt.style.use('...')设置样式。而不是自行设置所有参数。

1.1 折线图

将x,y绘制为“线”和/或“点”。可以只显示点、只显示线,或者点、线都显示。

  • 绘图函数常用调用方式
    • ax.plot([x], y, [fmt])
    • ax.plot([x], y, [fmt],[x2],y2,[fmt],...)
  • plot函数常用参数
    • c=‘r’:设置颜色(color)
    • ls=’-’,w=1.5:设置线样式(linestyle)和线宽(linewidth)
    • marker=‘o’,ms=1.5:设置点样式和点大小(markersize)
    • 点颜色
      • mfc=‘r’:点填充颜色(markerfacecolor)
      • mec=‘g’:点边缘颜色(markeredgecolor)
      • mew=0.5:点边缘宽度(markeredgewidth)
    • fmt参数同时设置点和线
      • fmt = '[marker][line][color]':fmt为字符串由点样式、颜色、线样式组成
      • '+r--':点样式为+,颜色为红色,线样式为虚线
import numpy as np
import matplotlib.pyplot as plt
fig=plt.figure() #创建画布
ax=fig.subplots() #创建图表

#准备数据
x=np.linspace(0, 4*np.pi,50)
y1=np.sin(x)
y2=np.cos(x)
y3=np.cos(x+np.pi)

#绘制'line1'。线条为灰色,线型为点划线('-.'),线宽为1
ax.plot(x,y1,c='gray', linestyle='-.', linewidth=1, label='line1')

#绘制'line2'。线条为红色,线型为虚线('--')
ax.plot(x,y2,'r--',label='line2')

#绘制'line3'。同时显示点和线。
#点大小为10,填充颜色为绿色,边缘颜色为红色,边缘宽度为1
#线为蓝色实线,线条宽度为2
ax.plot(x,y3,'ob-', mfc='g', mec='r', ms=10, linewidth=2 ,label='line3')

ax.legend(loc="upper right")#设置图例
plt.show()

plot折线图

1.2 散点图

将x,y绘制为不同大小和颜色的散点图。

  • 绘图函数常用调用方式
    • ax.scatter(x,y)
    • ax.scatter(x,y,s=s,c=c,alpha=0.5)
      • s:点大小设置参数。浮点数或者列表。单位为points^2
      • c:点颜色。浮点数、颜色或者颜色列表。
      • aplpha:点的透明度,值为0-1。

比较特别的,用浮点数表示颜色,表示从当前colormap映射得到的颜色。并非所有颜色参数都可以浮点数表示(比如plot就不行)。

import numpy as np
import matplotlib.pyplot as plt
fig=plt.figure() #创建画布
ax=fig.subplots() #创建图表

#准备数据
x=np.random.randn(50)*10
y=np.random.randn(50)*10
s=(np.random.randn(50)*10)**2
c=np.random.randn(50)*10

#绘制散点图。颜色为c,大小为s(单位points^2),透明度为0.5
ax.scatter(x,y,s=s,c=c,alpha=0.5)

plt.show()

scatter散点图

1.3 柱状图

将y绘制成柱状图(bar函数绘制垂直柱状图,barh函数绘制水平柱状图)。

  • 绘图函数常用调用方式
    • ax.bar(x, height), ax.barh(y, width)
    • ax.bar((x, height ,tick_label=[...], color=c, lw=1, edgecolor=c1))
      • x参数,bar坐标刻度参数。也是默认的坐标刻度文本。barh为y参数。
      • height参数,柱状长度参数。barh为width参数。
      • tick_label参数:坐标刻度文本,不再使用x,y作为柱标签
      • color:颜色参数
      • lw=1,edgecolor=c1:柱形图边缘宽度和颜色

比较特别的,用浮点数表示颜色,表示从当前colormap映射得到的颜色。并非所有颜色参数都可以浮点数表示(比如plot就不行)。

import numpy as np
import matplotlib.pyplot as plt
fig=plt.figure() #创建画布
ax=fig.subplots() #创建图表

#准备数据
x=np.arange(6)
y=np.random.uniform(0,10,6)

#ax.bar(x,y) #绘制简单柱状图。用x坐标文本标签
#制定文本作为标签,填充灰色,描边宽度为1,颜色为橙色
ax.bar(x,y,tick_label=list('abcdef'),color='gray',lw=1,ec='orange') 

plt.show()

scatter柱状图

1.4 雷达图

网上非常流行的雷达图,实际上就是极坐标下的柱状图。

import numpy as np
import matplotlib.pyplot as plt
np.random.seed(202201)
ax = plt.subplot(projection='polar')

theta = np.linspace(0, 2 * np.pi, 20)
r = 10 * np.random.rand(20)
width = np.pi / 4 * np.random.rand(20)
colors = plt.get_cmap('hsv')(r/10)

ax.bar(theta, r, width=width, color=colors, alpha=0.5)

plt.show()

雷达图

1.5 饼图

将y绘制成柱状图(bar函数绘制垂直柱状图,barh函数绘制水平柱状图)。

  • 绘图函数常用调用方式
    • ax.pie(x):绘制简单饼状图。无标签,默认颜色设置
    • ax.bar(x, labels=[...], colors=[...])
      • x参数:确定饼状图比例。
      • labels参数:柱状图文本标签。
      • colors参数:饼状图的颜色。
      • 炸开设置
        • explode=[0,0.2,0,0]:第i个数字表示第i个饼炸开距离(数值×半价=距离)
          • explode参数的长度必须和x参数相同,explode第0个数值貌似没有用
      • 边线
        • wedgeprops={'lw':2,'ec':'lightblue'}:设置边线参数,lw、ec是linewidth,edgecolor的缩写。
        • wedgeprops={'width':0.2}:环形饼图,环宽度与半径比例为0.2

frame参数设置是否显示坐标系,默认False,与plt.axis(‘off’)相同。

import numpy as np
import matplotlib.pyplot as plt
fig=plt.figure() #创建画布
ax=fig.subplots() #创建图表

#准备数据
x=np.arange(6)

#ax.pie(x) #绘制简单饼状图。无标签,默认颜色设置
ax.pie(x,
       labels=list('abcdef'),             #设置标签
       explode=[0,0,0.1,0,0,0],           #第2个饼图炸开
       wedgeprops={'lw':2,'ec':'lightblue'})  #描边
#plt.axis('off')  #不显示坐标轴

plt.show()

饼图

1.6 环状饼图及嵌套饼图

通过在pie函数的wedgeprops(字典)参数中设置'width':0.2,可以创建环形饼图,环宽度与半径比例为0.2

import matplotlib.pyplot as plt
import numpy as np
np.random.seed(202201)
fig, ax = plt.subplots()

val1 = np.abs(np.random.randn(3))
val2 = np.abs(np.random.randn(5))
cmap = plt.colormaps["tab20c"]
outer_colors = cmap(np.arange(3)*4)
inner_colors = cmap([9,1,3,5,2])

ax.pie(val1, radius=1, colors=outer_colors,wedgeprops=dict(width=0.3, edgecolor='w'))
ax.pie(val2, radius=0.7, colors=inner_colors,wedgeprops=dict(width=0.3, edgecolor='w'))

ax.set_aspect(1)
plt.show()

环状饼图

1.7 火柴图

将x,y绘制成火柴图。

  • 绘图函数常用调用方式
    • ax.stem(x,y)
    • ax.stem(x,y,linefmt='-',markerfmt='C0o')
      • linefmt参数:设置线型,可以选’-’,’–’,’-.’,’:’
      • markerfmt参数:设置点样式和颜色。字符串,颜色智能是简写,或者C0,C1,…CN
import numpy as np
import matplotlib.pyplot as plt
fig=plt.figure() #创建画布
ax=fig.subplots() #创建图表

#准备数据
x=np.arange(6)
y=np.random.uniform(1,10,6)

#ax.stem(x,y)
ax.stem(x,y,
        linefmt="--",
        markerfmt="C2o")

plt.show()

火柴图

1.8 曲线填充图

fill_between在(x,y1)和(x,y2)曲线之间填充颜色。
fill_betweenx在(x1,y)和(x2,y)曲线之间填充颜色。

  • ax.fillbetween(x,y1,y2):在y方向y1,y2之间填充
  • ax.fill_betweenx(y,x1,x2):在x方向x1,x2之间填充
    • y2,x2可以省略,默认为0
    • ax.fillbetween(x,y1,y2,where=y2>y1):根据条件填充,只填充y2>y1的区域
import numpy as np
import matplotlib.pyplot as plt
fig=plt.figure() #创建画布
ax=fig.subplots() #创建图表

#准备数据
x=np.linspace(0,2*np.pi,200)
y1=np.sin(x)
y2=np.cos(x)

ax.fill_between(x,y1,y2,color='C2')  #填充y1,y2之间的区域
#ax.fill_between(x,y1,y2,where=y2>y1) #只填充y2>y1的区域

plt.show()

1.9 面积图

对多个曲线(x,y1,y2,y3…)依次叠加绘制面积填充图。

  • ax.stackplot(x,y1,y2,...):y1,y2,y3…长度和x相同
  • ax.stackplot(x,y):y为m行长度为len(x)的数组。即y相当于[y1,y2,y3...]
    • colors参数:颜色列表,填充颜色循环使用colors列表中的颜色
    • labels参数:设置各个曲线标签,用于图例
    • baseline参数:基线‘zero’,‘sym’,or ‘wiggle’(斜率平方和最小)
import numpy as np
import matplotlib.pyplot as plt
fig=plt.figure() #创建画布
ax=fig.subplots() #创建图表

#准备数据
x=np.linspace(0,2,30)
y1=np.full(30,0.2)
y2=np.full(30,0.2)
y3=np.full(30,0.3)
y4=(x+0.5)**1.1

ax.stackplot(x,y1,y2,y3,y4)
#ax.stackplot(x,y1,y2,y3,y4,baseline="sym",colors=['r','b'])

plt.show()

面积图

2. 辅助直线

2.1 直线

  • axhline(y=0,xmin=0,xmax=1):水平线,起始位置(xmin,xmax)
  • axvline(x=0,ymin=0,ymax=1):垂直线,起始位置(ymin,ymax)
  • axline((0,0),(1,1)):通过两点的无限长直线
import numpy as np
import matplotlib.pyplot as plt
fig=plt.figure() #创建画布
ax=fig.subplots() #创建图表

ax.axhline(y=1)
ax.axvline(x=1)
ax.axhline(y=3,xmin=0.1,xmax=0.8,c='r')
ax.axvline(x=3,ymin=0.1,ymax=0.8,c='r')
ax.axline((0,0),(1,1))

ax.set_xlim(0,5)
ax.set_ylim(0,5)

plt.show()

直线

2.2 一组直线

import numpy as np
import matplotlib.pyplot as plt
fig=plt.figure() #创建画布
ax=fig.subplots() #创建图表

ax.hlines([1,2,3],0,4)
ax.vlines([3,2,1],0.5,4)

ax.set_xlim(0,5)
ax.set_ylim(0,5)

plt.show()

2.3 填充线

  • ax.axhspan(ymin, ymax, xmin=0, xmax=1):绘制高度范围ymin到ymax的竖线
  • ax.axvspan(xmin, xmax, ymin=0, ymax=1):绘制宽度范围xmin到xmax的水平线
import numpy as np
import matplotlib.pyplot as plt
fig=plt.figure() #创建画布
ax=fig.subplots() #创建图表

ax.axhspan(1,2)
ax.axvspan(2,3)

ax.set_xlim(0,5)
ax.set_ylim(0,5)

plt.show()

填充线

3. 二维标量场

3.1 imshow

数据显示为一个二维图片。(颜色填充二维网格)

  • ax.imshow(X):X数据绘制为图像
    • X为(M,N,3)数据时,M行N列栅格图像,每个格子用RGB颜色填充
    • X为(M,N,4)数据时,M行N列栅格图像,每个格子用RGBA颜色填充
    • X为(M,N)数据时,M行N列栅格图像,每个格子用colormap颜色绘制
    • interpolation=‘bicubic’:插值方式,可用’nearest’,‘bilinear’,‘bicubic’,‘spline16’,‘spline36’,‘hermite’,‘bessel’,'gaussian’等。
    • aplha=0.5:设置透明度
    • origin=‘lower’:默认最上方为第一行数据。lower则第一行数据在最下方显示。默认为upper
import numpy as np
import matplotlib.pyplot as plt
fig=plt.figure() #创建画布
ax=fig.subplots() #创建图表

X=np.random.randn(9,9)
ax.imshow(X)

ax.axis('off')
plt.show()

imshow

3.2 pcolor

伪彩色图片显示。功能类似imshow,但是不需要x,y坐标等间距。

  • ax.pcolor([X,Y],Z):X,Y省略时,与C参数与imshow的参数用法接近
    • ec='w':设置edgecolor参数。色块之间显示边框线。
    • alpha=0.5:设置色块透明度

pcolor与imshow的不同:

  • pcolor相比imshow更加灵活,不需要x,y等间距,因为可以设置x,y值。
  • pcolor没有origin参数,第一行数据显示在在下边。相当于imshow的origin=‘lower’
  • pcolor不支持interpolation参数

pcolormesh与pcolorfast比pcolor更快,参数一致

import numpy as np
import matplotlib.pyplot as plt
fig=plt.figure() #创建画布
ax=fig.subplots() #创建图表
np.random.seed(202201)

x,y=np.mgrid[0:9,0:9]
c=np.random.randn(9,9)
ax.pcolor(x,y,c)
#ax.pcolor(c) #注意,因为mgrid的顺序问题,与不省略x,y绘制的图颜色顺序不同。

ax.axis('off')
plt.show()

pcolor

3.3 contour、contourf等值线

绘制等值线,或者等高线。

  • ax.contour([X,Y],Z):根据Z值绘制等值线,也就是等高线。
    • levels=5:设置等高线数量,也可以用列表直接指定,比如levels=[1,2,3]
    • origin=‘lower’:设置z[0,0]在左下角。'upper’设置z[0,0]在左上角。
    • colors和cmaps参数:两个参数不能同时设置,会出错。
      • 默认根据cmaps的colormap指定颜色。
      • colors指定后cmaps失效。colors为颜色值或者颜色列表

contourf与contour用法完全一致,contourf会在等高线间填充颜色。

import numpy as np
import matplotlib.pyplot as plt
fig=plt.figure() #创建画布
ax=fig.subplots() #创建图表
np.random.seed(202201)

x,y=np.mgrid[-1:1:0.1,-1:1:0.1]
z=x**2+y**2
#ax.contour(x,y,z)
#ax.contourf(x,y,z)
#ax.contour(x,y,z,levels=15,origin='upper')
ax.contourf(x,y,z,levels=15,origin='upper')

plt.show()

contour

4. 二维矢量场

4.1 quiver箭头(速度)图

绘制表示矢量场的箭头图。比如速度场就是典型的矢量场

  • ax.quiver([X,Y],U,V):在x,y位置绘制箭头,箭头x,y方向的大小分量分别为u,v。。
    • U,V:分别为x,y轴方向的速度场大小分量。
    • C参数:映射colormap颜色的数组。C的值数量必须与箭头数相同。
    • color参数:与C不同,只能设置颜色或颜色列表,不能用数值表示。
    • 箭头参数:
      • angle='uv':箭头方向参数。默认u表示x轴分量,v表示y轴分量。'xy’表示箭头方向为(x,y)指向(x+u,y+v)
      • units='width':箭头大小单位,默认取系数×width。
        • ‘width’,‘height’:参数取这几个值分别表示宽度、高度作为系数基准。
        • ‘x’,‘y’,‘xy’:表示x,y轴单位及x,y平方根作为基准。

headwidth,headlength等参数可以调整箭头头部大小。

import numpy as np
import matplotlib.pyplot as plt
fig=plt.figure() #创建画布
ax=fig.subplots() #创建图表
np.random.seed(202201)
plt.style.use('ggplot')

x,y=np.mgrid[-1:1:0.1,-1:1:0.1]
u=x+y
v=y-x
#ax.quiver(x,y,u,v)
ax.quiver(x,y,u,v,units='xy')

plt.show()

速度图

4.1 streamplot流线图

绘制表示矢量场的流线图。

  • ax.streamplot(x,y,u,v):x,y为坐标参数,u,v为矢量方向分量参数。
    • density=0.5参数:流线密度,默认为1。用desity=(0.5,1)表示不同方向密度不同。
    • color参数:可以为颜色值,也可以为浮点数数组。浮点数数组表示映射colormap的值。

linewidth, arrowsize, arrowstyle等参数可以设置流线细节,需要用的时候再查API就ok

import numpy as np
import matplotlib.pyplot as plt
fig=plt.figure() #创建画布
ax=fig.subplots() #创建图表
np.random.seed(202201)

y,x=np.mgrid[-1:1:0.1,-1:1:0.1]  #streamplot要求x每行必须相同
u=x+y
v=y-x
#ax.streamplot(x,y,u,v)
ax.streamplot(x,y,u,v,density=0.5, color=np.random.randn(20,20))

plt.show()

流线图

5. 统计绘图

5.1 直方图

统计数据分布绘制直方图。

  • ax.hist(x):数据x按若干个区间统计分布个数,绘制成直方图。
    • bins=10:参数设置x分成10个区间
    • density=True:默认统计区间内数值个数,density=True统计数值个数占len(x)的比例。
    • histtype=‘bar’:直方图样式,可取’bar’,‘barstacked’,‘step’,‘stepfilled’
    • orientation=‘horizontal’:水平直方图或者垂直直方图
    • color=“C1”:设置颜色,多个直方图绘制时,可以为颜色列表。
    • 多个直方图绘制在同一个图中
      • stacked=True:多个直方图叠加方式绘制
      • label:为每个直方图设置标签名称
import numpy as np
import matplotlib.pyplot as plt
fig=plt.figure() #创建画布
ax=fig.subplots() #创建图表
np.random.seed(202201)

x=np.random.randn(1000)
#ax.hist(x)
ax.hist(x,bins=8,ec='w',lw=1,color="C1") #设置分组数,设置edgecolor和linewidth

plt.show()

直方图

5.2 hist2d二维直方图

统计二维数据分布绘制在平面上,用颜色表示分布数量。

  • ax.hist2d(x,y):数据x,y分布按若干个区间统计数据分布个数,绘制成平面图,用颜色表示分布数量。
    • bins=10:x,y轴都分成10个区间,bins=[5,5]分别设定x,y轴区间数。
    • ec=‘w’,lw=1,density=True:同hist
    • cmap:设置colormap
import numpy as np
import matplotlib.pyplot as plt
fig=plt.figure() #创建画布
ax=fig.subplots() #创建图表
np.random.seed(202201)

x=np.random.randn(1000)
y=np.random.randn(1000)
#ax.hist2d(x,y)
h=ax.hist2d(x,y,bins=20,cmap="Oranges") #设置分组数
#ec='w',lw=1,density=True)。设置edgecolor和linewidth

plt.colorbar(h[3],ax=ax)
plt.show()

hist2d

5.3 boxplot箱型图

根据数据x的每一列数据的四分位数(最小、25%,中位数、75%、最大,分别称为Q0-5)值绘制箱型图。

boxplot函数与标准的箱型图略有不同,Q1-1.5(Q3-Q1),Q5用Q3+1.5(Q3-Q1)。超出Q0-Q5范围的值单独用o表示。

  • ax.boxplot(x):绘制x每一列的箱型图
    • sym=“r+”:超出Q0-Q5范围的值的绘制颜色和符号。
    • whis=1.5:Q0=Q1-whis*(Q3-Q1)Q5=Q3+whis*(Q3-Q1)
    • showfliers=False:不显示超出Q0-Q5范围的点。
import numpy as np
import matplotlib.pyplot as plt
fig=plt.figure() #创建画布
ax=fig.subplots() #创建图表
np.random.seed(202201)

x=np.random.randn(100,5)  #5列,所以绘制5个箱型图
#ax.boxplot(x)
ax.boxplot(x,sym="r+",whis=1.25) #设置分组数

plt.show()

boxplot

5.4 errorbar误差图

在坐标x,y处,根据yerr绘制上下误差。

  • ax.errorbar(x,y,yerr):类似plot绘制x,y折线或散点图,并根据yerr绘制误差。
    • fmt="+":设置线条及点样式。格式同plot函数,即"[markerstyle][color][linestyle"
    • lw=2:设置linewidth
    • c=“C2”:设置color
    • capsize=4:误差线,上下端短线长度。
import matplotlib.pyplot as plt
fig=plt.figure() #创建画布
ax=fig.subplots() #创建图表
np.random.seed(202201)

x = np.arange(-5,5,0.5)
y = np.sin(x/2)
yerr = np.random.randn(20)/5
#ax.errorbar(x,y,yerr)
ax.errorbar(x,y,yerr,fmt='o-',lw=2,capsize=4,c="C2") #设置x,y样式及线宽,设置误差样式

plt.show()

errorbar

5.5 hexbin填充六边形统计图

在坐标x,y处,根据yerr绘制上下误差。

  • ax.hexbin(x,y):类似hist2D,对x,y坐标轴分为若干个区间,统计区间内数值出现次数,绘制六边形颜色表示。
    • gridsize=20:x,y坐标轴分为20份。gridsize=(5,10)分别设置x,y坐标轴六边形数量。
    • cmap:设置colormap
    • edgecolors=‘w’:指定六边形边缘颜色。
import numpy as np
import matplotlib.pyplot as plt
fig=plt.figure() #创建画布
ax=fig.subplots() #创建图表
np.random.seed(202201)
plt.style.use('_mpl-gallery-nogrid')

x = np.random.randn(1000)
y = x+np.random.randn(1000)/5
#ax.hexbin(x,y)
h=ax.hexbin(x,y,gridsize=20,edgecolors='w')

plt.colorbar(h)
plt.show()

hexbin

6. 非结构化三角网格坐标

‎对于(x,y)坐标处的高度z,可以使用本类函数绘制等值线,并填充三角面。而不需要先网格化数据,然后使用contour函数绘制‎‎等值线。

contour函数需要x,y坐标需要像meshgrid输出一样,结构化的。

6.1 tricontour非结构三角网格等值线

‎在非结构化三角形网格上绘制等值线。‎

  • ax.tricontour(x,y,z):为x,y,z组成的非结构网格绘制等值线
  • ax.tricontourf(x,y,z):绘制等值线并且填充颜色
    • levels=8:等值线数量
    • cmap=“Oranges”:colormap参数。
    • colors:颜色参数,不能和cmap同时使用
import numpy as np
import matplotlib.pyplot as plt
fig=plt.figure() #创建画布
ax=fig.subplots() #创建图表
np.random.seed(202201)

x=np.random.randn(100)
y=np.random.randn(100)
z=x**2+y**2
ax.plot(x, y, 'o', markersize=2, color='lightgrey')
#ax.tricontour(x,y,z)
ax.tricontourf(x,y,z,levels=8,cmap="Oranges")#colors和cmap不能同时设置

plt.show()

tricontour

6.2 tripcolor三角网格伪彩色图

为非结构化三角网格绘制伪彩色图。

  • ax.tripcolor(x,y,z)
import numpy as np
import matplotlib.pyplot as plt
fig=plt.figure() #创建画布
ax=fig.subplots() #创建图表
np.random.seed(202201)

x=np.random.randn(100)
y=np.random.randn(100)
z=x**2+y**2
ax.plot(x, y, 'o', markersize=2, color='lightgrey')
ax.tripcolor(x,y,z)

plt.show()

tripcolor

6.3 triplot非结构三角网格plot

把非结构三角网格绘制成曲线或者散点图。

  • ax.triplot(x,y):所有参数和ax.plot完全相同

不需要z参数

import numpy as np
import matplotlib.pyplot as plt
fig=plt.figure() #创建画布
ax=fig.subplots() #创建图表
np.random.seed(202201)

x=np.random.randn(100)
y=np.random.randn(100)
#ax.triplot(x,y)
ax.triplot(x,y, 'o-', markersize=2, color="C0", mfc='lightgrey',mec='lightgray')

plt.show()

triplot

7. 信号谱分析

频谱相关

7.1 acorr自相关

绘制x的自相关图。

自相关指,序列x,前后自己相关。即{Xt}和{Xt+k}之间的相关系数。
从两个随机变量之间相关系数,变为了一个随机变量时间前后(滞后k期)相关系数。

  • ax.acorr(x):绘制x的自相关图,默认最大滞后期为10
    • maxlags=20:设置最大滞后期数值

自相关图横坐标为滞后期,即k,竖轴为相关系数。

相关系数为-1~1之间浮点数。-1为负相关,1为正相关,0为不相关。

import numpy as np
import matplotlib.pyplot as plt
fig=plt.figure() #创建画布
ax=fig.subplots() #创建图表
np.random.seed(202201)

t=np.linspace(0,8*np.pi,100) #4个周期
x=np.sin(t)
#ax.acorr(x)
ax.acorr(x,maxlags=25)

plt.show()

acorr

7.2 xcorr互相关图

‎绘制‎‎x‎‎和‎‎y‎‎之间的互相关图。‎

相关系数x[n+k]y[n]计算,k为滞后期

  • ax.xcorr(x,y):绘制x,y的相关图,默认最大滞后期为10
    • maxlags=20:设置最大滞后期数值
import numpy as np
import matplotlib.pyplot as plt
fig=plt.figure() #创建画布
ax=fig.subplots() #创建图表
np.random.seed(202201)

t=np.linspace(0,8*np.pi,100) #4个周期
x1=np.sin(t)
x2=np.cos(t)

#ax.xcorr(x1,x2)
ax.xcorr(x1,x2,maxlags=25)

plt.show()

xcorr

7.3 psd功率谱密度

绘制功率谱密度。

PSD——Power Spectral Density 是表征信号的功率能量与频率的关系的物理量,单位频带的信号功率就被称之为功率谱。。PSD经常用来研究随机振动信号。

功率谱与频谱不太一样。

  • 功率谱的计算需要信号先做自相关,然后再进行FFT运算。
  • 频谱的计算则是将信号直接进行FFT就行了。
  • 功率谱是对信号研究,不过它是从能量的方面来对信号研究的。
  • ax.psd(x)
import numpy as np
import matplotlib.pyplot as plt
fig=plt.figure() #创建画布
ax=fig.subplots() #创建图表
np.random.seed(202201)

t=np.linspace(0,8*np.pi,100) #4个周期
x1=np.sin(t)

#ax.xcorr(x1,x2)
ax.psd(x1)

plt.show()

psd

7.4 CSD两个信号的交叉频谱密度

‎计算两个信号的交叉频谱密度‎(cross spectral density)

交叉谱,或者交叉频谱用来表征两个序列(时间相关)在某个(某些)频率组分上的相关程度,取值范围是0-1。

  • ax.csd(x,y)
import numpy as np
import matplotlib.pyplot as plt
fig=plt.figure() #创建画布
ax=fig.subplots() #创建图表
np.random.seed(202201)

t=np.linspace(0,8*np.pi,100) #4个周期
x1=np.sin(t)
x2=np.cos(t)

ax.csd(x1,x2)

plt.show()

功率谱密度是功率沿频率轴的分布。信号的PSD是信号的傅立叶变换的自相关

互谱密度相同,但是使用互相关,因此您可以使用其平方模块找到两个信号在给定频率下共享的功率,并使用其自变量找到该频率下两个信号之间的相移。

互谱密度可以用于识别嘈杂的LTI系统的频率响应:如果噪声与系统的输入或输出不相关,则可以从输入和输出的CSD中找到其频率响应。

csd



Matplotlib系列目录


个人总结,部分内容进行了简单的处理和归纳,如有谬误,希望大家指出,持续修订更新中。

修订历史版本见:https://github.com/hustlei/AI_Learning_MindMap

未经允许请勿转载。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/hustlei/article/details/122586385

智能推荐

github经典C++状态机(fsm)源代码剖析_c++状态机fsm源码剖析-程序员宅基地

文章浏览阅读9.7k次,点赞13次,收藏85次。在 github上有一个经典的状态机r-lyehv1.0.0,该状态机使用C++开发(支持C++11),单头文件,轻量级,跨平台,支持lambda表达式,使用非常方便,大大地简化了代码,使业务逻辑更清晰,是一个不错的fsm库,值得推荐。下载链接:下载下面对源该经典状态源代码以及示例以中文注释的方式进行剖析,以及大家更好地了解其原理及使用。//每个状态机都有'init', 'quit', 'push', 'back'四个成员成员函数//init:在创建某一状态时调用 ;quit在某一状态结束时.._c++状态机fsm源码剖析

WGAN-GP:更容易训练的GAN-程序员宅基地

文章浏览阅读1.1w次,点赞24次,收藏110次。  WGAN-GP又称为具有梯度惩罚的WGAN,一般可以替代WGAN1.WGAN:基于推土机距离原理的GAN(1)原始GAN的问题及原因  实际训练中,GAN存在训练困难、生成器和判别器的loss无法指示训练过程、生成样本缺乏多样性等问题。这与GAN的机制有关。  GAN最终达到对抗的纳什均衡只是一个理想状态,而实际情况中得到的结果都是中间状态。大部分情况是,随着训练的次数越多判别器D的效果越好,一直可以将生成器G的输出和真实样本区分开。  这是因为生成器G是从低维向高位空间映射,其生成的样本分布_wgan-gp

通过大数据智能风控,金融机构减少了对抵押物的依赖_金融科技识别抵押物价值-程序员宅基地

文章浏览阅读499次。  金融业的数字化转型引发持续关注。数字金融、智能金融、区块链等关键词都得到了热烈讨论。数据,作为一种新型生产要素,早已成为推动国经济质量发展的重要动能。数据智能驱动金融业蝶变,“一切业务数据化,一切数据业务化”势不可挡。  我国金融数字化水平处于领先地位  随着大数据、云计算、区块链、AI、5G等基础技术迅速发展,我国的数字金融也打开了新的局面。  金融业的数字化转型过程大致分为三个阶段:最初,金融业从长尾用户切入,利用互联网优势,逐步打开市场。其后,更多新技术应用到更多金融场景之中,数据智能转型加_金融科技识别抵押物价值

重拾web开发-JavaScript复习-程序员宅基地

文章浏览阅读50次。以下内容都是本人之前学习的一些笔记很多是摘自网上并非完全原创,特此申明。最简单的一句js:<html><body><script type="text/javascript">document.write("Hello World!");</script></body></html>..._web javascript复习

rk3588/rk356x/rv1109/rv1126 live555移植+mpp编译 rtsp拉流_rk3588 与rv1109-程序员宅基地

文章浏览阅读7.3k次,点赞7次,收藏57次。rk3588 rk356x rv1126/1109 mpp编译 _rk3588 与rv1109

python爬虫之爬取百度图片(图文并排,炒鸡详细!!!)_爬虫+排版-程序员宅基地

文章浏览阅读2.1k次,点赞4次,收藏12次。第一步:登录百度图片官网,截图如下所示:注意点一:开头必须是https(如上图所示,出现锁的标志),不能是http,否则后期下载图片文件会出错第二步:输入关键字,页面加载出来之后,按F12进入开发者模式,由于百度图片ajax动态加载,点击network选项卡,重新刷新页面,查看XHR数据,截图如下所示:第三步:分析多个XHR,得出规律,每一个页面所请求的url所携带的参数只有pn,rn,..._爬虫+排版

随便推点

组态王打包程序_组态王打包成exe程序-程序员宅基地

文章浏览阅读9.5k次,点赞3次,收藏14次。1、将要打包的项目设为当前工程2、开始 —> 组态王6.55 —>工程打包工具。3、在弹出的窗口中,找到组态王安装路径Kingview文件夹中的KVPacket.Prj文件,单机选中,之后点击打开。4、而后跳出的生成路径,无所谓,自己是设定好了,如:D:\chenzhutaibuild,建议放在D盘,别问为什么,哈哈5、如果需要添加相应的读写文件等其它高级操作,则接着点击上图中的“高级”按钮6、这里暂时不需要,所以直接点击生成按钮7、..._组态王打包成exe程序

Python脚本在Windows下后台运行_python 可以实现window系统下 进程挂起吗-程序员宅基地

文章浏览阅读1.5w次。Python脚本在Linux后台执行加个&就行了在Windows起Python服务总有不畅查了一下,可以用start /b python xxx.py后台运行,这招虽然不影响cmd操作,但是关闭cmd窗口后服务也死了解决这个问题挺麻烦的,需要以Windows服务的方式挂起来第一步,将Python脚本打包成exe可执行文件,详见: 用python_python 可以实现window系统下 进程挂起吗

解决 “MoveFile”: 类型库“XXX.dll”中的标识符已经是宏;使用“rename”限定符 类型库符号与系统符号冲突问题_类型库中的标识符已经是宏;使用“rename”限定符-程序员宅基地

文章浏览阅读667次。今天在VS工程当中引入一个组件,编译的时候出现警告, “MoveFile”: 类型库“XXX.dll”中的标识符已经是宏;使用“rename”限定符。虽然只是一个警告,但看着实在不爽,更重要的是,警告在某些情况下,可能正是bug的来源,并且这类bug往往非常难以定位。废话不多话,下面来解决问题。 看编译器给出的提示,是告诉我们,类型库当中的符号和系统符号有重名,同时也给出了解决方法,就是..._类型库中的标识符已经是宏;使用“rename”限定符

PCL教程-点云滤波之体素滤波器(下采样)_体素下采样-程序员宅基地

文章浏览阅读1.3w次,点赞14次,收藏99次。原文链接:Downsampling a PointCloud using a VoxelGrid filter点云文件下载:table_scene_lms400.pcd在本篇教程中,我们将使用体素化的方式对点云数据进行下采样。原理下采样:减少点云数据集中点云数量体素滤波器可以达到向下采样同时不破坏点云本身几何结构的功能,但是会移动点的位置。 此外体素滤波器可以去除一定程度的噪音点及离群点。主要功能是用来进行降采样。它的原理是根据输入的点云,首先计算一个能够刚好包裹住该点云的立.._体素下采样

微信小程序大赛介绍文档_竞赛作品介绍文档怎么写-程序员宅基地

文章浏览阅读1.2w次,点赞30次,收藏140次。参加的是2020年的微信小程序大赛,我们的作品介绍文档仅供参考。可以去我的资源下载—>>>微信小程序大赛作品介绍文档部分展示(一共23页):参加的是2020年的微信小程序大赛,我们的作品介绍文档仅供参考。可以去我的资源下载—>>>微信小程序作品介绍文档..._竞赛作品介绍文档怎么写

【Python】Excel数据转化为矩阵_python excel 将一行转换为一个三角矩阵-程序员宅基地

文章浏览阅读1.8w次,点赞2次,收藏30次。原文链接:https://blog.csdn.net/ling_cmd/article/details/81063706def excel2m(path): data = xlrd.open_workbook(path) table = data.sheets()[0] nrows = table.nrows # 行数 ncols = table.ncols ..._python excel 将一行转换为一个三角矩阵

推荐文章

热门文章

相关标签