Matplotlib库由各种可视化类构成,内部结构复杂,受Matlab启发
matplotlib.pyplot是绘制各类可视化图形的命令子库,相当于快捷方式
import matplotlib.pyplot as plt
plt.plot()只有一个输入列表或数组时,参数被当作Y轴,X轴以索引自动生成
import matplotlib.pyplot as plt
plt.plot([3,1,4,5,2])
plt.ylabel("Grade")
plt.show()
![![[Matplotlib库入门1.png]]](https://i-blog.csdnimg.cn/direct/f9fdd945fef94624afdc26eaf0d56a6f.png)
plt.savefig()将输出图形存储为文件,默认PNG格式,可以通过dpi修改输出质量
import matplotlib.pyplot as plt
plt.plot([3,1,4,5,2])
plt.ylabel("Grade")
plt.savefig('test',dpi=600) #PNG文件
plt.show()
plt.plot(x,y)当有两个以上参数时,按照X轴和Y轴顺序绘制数据点
import matplotlib.pyplot as plt
plt.plot([0,2,4,6,8],[3,1,4,5,2])
plt.ylabel("Grade")
plt.axis([-1,10,0,6])
plt.show()
![![[Matplotlib库入门2.png]]](https://i-blog.csdnimg.cn/direct/879b7a0913174c73af71ea601457b890.png)
pyplot的绘图区域
plt.subplot(nrows,ncols,plot_number, **kwargs)
plt.subplot(3,2,4) #按两条横线,一条竖线,划分6个子区域
plt.subplot(324)
#在全局绘图区域中创建一个分区体系,并定位到一个子绘图区域
![![[Matplotlib库入门3.png]]](https://i-blog.csdnimg.cn/direct/2a37f4cedfdc422c9874cb4f66797d1e.png)
import matplotlib.pyplot as plt
import numpy as np
def f(t):
return np.exp(-t) * np.cos(2 * np.pi * t)
a = np.arange(0.0,5.0,0.02)
plt.subplot(211)
plt.plot(a,f(a))
plt.subplot(2,1,2)
plt.plot(a,np.cos(2*np.pi*a),'r--')
plt.show()
![![[Matplotlib库入门4.png]]](https://i-blog.csdnimg.cn/direct/3236a0d15dbd493f8efb05cda9fc3d4e.png)
pyplot函数
plt.plot(x , y , format_string, **kwargs)
x : X轴数据,列表或数组,可选
y : Y轴数据,列表或数组
format_string : 控制曲线的格式字符串,可选
**kwargs : 第二组或更多(x,y,format_string)
当绘制多条曲线时,各条曲线的x不能省略
例子
import matplotlib.pyplot as plt
import numpy as np
a = np.arange(10)
plt.plot(a,a*1.5,a,a*2.5,a,a*3.5,a,a*4.5)
plt.show()
![![[Matplotlib库入门5.png]]](https://i-blog.csdnimg.cn/direct/e362e78852174a5bbeb9af675d0fb612.png)
format_string: 控制曲线的格式字符串,可选由颜色字符、风格字符和标记字符组成
| 颜色字符 | 说明 | 颜色字符 | 说明 |
|---|---|---|---|
| ‘b’ | 蓝色 | ‘m’ | 洋红色 magenta |
| ‘g’ | 绿色 | ‘y’ | 黄色 |
| ‘r’ | 红色 | ‘k’ | 黑色 |
| ‘c’ | 青绿色 cyan | ‘w’ | 白色 |
| ‘#00800’ | RGB某颜色 | ‘0.8’ | 灰度值字符串 |
| 风格字符 | 说明 |
|---|---|
| ‘-’ | 实线 |
| ‘–’ | 破折线 |
| ‘-.’ | 点划线 |
| ‘:’ | 虚线 |
| ’ ’ ’ ’ | 无线条 |
| 标记字符 | 说明 | 标记字符 | 说明 | 标记字符 | 说明 |
|---|---|---|---|---|---|
| ‘.’ | 点标记 | ‘1’ | 下花三角标记 | ‘h’ | 竖六边形标记 |
| ‘,’ | 像素标记(极小点) | ‘2’ | 上花三角标记 | ‘H’ | 横六边形标记 |
| ‘o’ | 实心圈标记 | ‘3’ | 左花三角标记 | ‘+’ | 十字标记 |
| ‘v’ | 倒三角标记 | ‘4’ | 右花三角标记 | ‘x’ | x标记 |
| ‘^’ | 上三角标记 | ‘s’ | 实心方形标记 | ‘D’ | 菱形标记 |
| ‘>’ | 右三角标记 | ‘p’ | 实心五角标记 | ‘d’ | 瘦菱形标记 |
| ‘<’ | 左三角标记 | ‘*’ | 星形标记 | ‘|’ | 垂直线标记 |
import matplotlib.pyplot as plt
import numpy as np
a = np.arange(10)
plt.plot(a,a*1.5,'go-',a,a*2.5,'rx',a,a*3.5,'*',a,a*4.5,'b-.')
plt.show()
![![[Matplotlib库入门6.png]]](https://i-blog.csdnimg.cn/direct/021b772425c64030a381d83cf083c442.png)
**kwargs : 第二组或更多(x,y,format_string)
color : 控制颜色, color='green'
linestyle : 线条风格, linestyle='dashed'
marker : 标记风格, marker='o'
markerfacecolor: 标记颜色, markerfacecolor='blue'
markersize : 标记尺寸, markersize=20
……
pyplot的中文显示
第一种方法
pyplot并不默认支持中文显示,需要rcParams修改字体实现
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.family'] = 'Simhei' #黑体
plt.plot([3,1,4,5,2])
plt.ylabel("纵轴(值)")
plt.show()
| 属性 | 说明 |
|---|---|
| ‘font.family’ | 用于显示字体的名字 |
| ‘font.style’ | 字体风格,正常’normal’或 斜体’italic’ |
| ‘font.size’ | 字体大小,整数字号或者’large’、‘x‐small’ |
| 中文字体的种类 rcParams[‘font.family’] |
| 中文字体 | 说明 |
|---|---|
| ‘SimHei’ | 中文黑体 |
| ‘Kaiti’ | 中文楷体 |
| ‘LiSu’ | 中文隶书 |
| ‘FangSong’ | 中文仿宋 |
| ‘YouYuan’ | 中文幼圆 |
| ‘STSong’ | 华文宋体 |
| 例子 |
import matplotlib.pyplot as plt
import matplotlib
import numpy as np
matplotlib.rcParams['font.family']='STSong'
matplotlib.rcParams['font.size'] = 20
a = np.arange(0.0,5.0,0.02)
plt.xlabel('横轴:时间')
plt.ylabel('纵轴:振幅')
plt.plot(a,np.cos(2*np.pi*a),'r--')
plt.show()
![![[Matplotlib库入门7.png]]](https://i-blog.csdnimg.cn/direct/f0e22fb05b1942b6b4d957e04cf72711.png)
第二种方法
在有中文输出的地方,增加一个属性:fontproperties
import matplotlib.pyplot as plt
import numpy as np
a = np.arange(0.0,5.0,0.02)
plt.xlabel('横轴:时间',fontproperties='SimHei',fontsize=20)
plt.ylabel('纵轴:振幅',fontproperties='SimHei',fontsize=20)
plt.plot(a,np.cos(2*np.pi*a),'r--')
plt.show()
pyplot的文本显示函数
| 函数 | 说明 |
|---|---|
| plt.xlabel() | 对 X轴增加文本标签 |
| plt.ylabel() | 对 Y轴增加文本标签 |
| plt.title() | 对图形整体增加文本标签 |
| plt.text() | 在任意位置增加文本 |
| plt.annotate() | 在图形中增加带箭头的注解 |
| 例子 |
import matplotlib.pyplot as plt
import numpy as np
a = np.arange(0.0,5.0,0.02)
plt.plot(a,np.cos(2*np.pi*a),'r--')
plt.xlabel('横轴:时间',fontproperties='SimHei',fontsize=15,color='green')
plt.ylabel('纵轴:振幅',fontproperties='SimHei',fontsize=15)
plt.title(r'正弦波实例 $y=cos(2\pi,x)$',fontproperties='SimHei',fontsize=15)
plt.text(2,1,r'$\mu=100$',fontsize=15)
plt.axis([-1,6,-2,2])
plt.grid(True)
plt.show()
![![[Matplotlib库入门8.png]]](https://i-blog.csdnimg.cn/direct/196f797ffb524f7a996c9a3168293689.png)
#新增语句
plt.annotate(r'$\mu=100$',xy=(2,1),xytext=(3,1.5),arrowprops=dict(facecolor='black',shrink=0.1,width=2))
![![[Matplotlib库入门9.png]]](https://i-blog.csdnimg.cn/direct/86cb8087e2c84e4f9c98f7794df9e513.png)
pyplot的子绘图区域
plt.subplot2grid(GridSpec, CurSpec, colspan=1, rowspan=1)
理念:设定网格,选中网格,确定选中行列区域数量,编号从0开始
plt.subplot2grid((3,3), (1,0), colspan=2)
![![[Matplotlib库入门11.png]]](https://i-blog.csdnimg.cn/direct/740f3c9455244e7f9a4f936329a528ca.png)
pyplot的基础图标函数
| 函数 | 说明 |
|---|---|
| plt.plot(x,y,fmt,…) | 绘制一个坐标图 |
| plt.boxplot(data,notch,position) | 绘制一个箱形图 |
| plt.bar(left,height,width,bottom) | 绘制一个条形图 |
| plt.barh(width,bottom,left,height) | 绘制一个横向条形图 |
| plt.polar(theta, r) | 绘制绘制极坐标图 |
| plt.pie(data, explode) | 绘制饼图 |
| plt.psd(x,NFFT=256,pad_to,Fs) | 绘制功率谱密度图 |
| plt.specgram(x,NFFT=256,pad_to,F) | 绘制谱图 |
| plt.cohere(x,y,NFFT=256,Fs) | 绘制X ‐ Y的相关性函数 |
| plt.scatter(x,y) | 绘制散点图,其中,x 和 y长度相同 |
| plt.step(x,y,where) | 绘制步阶图 |
| plt.hist(x,bins,normed) | 绘制直方图 |
| plt.contour(X,Y,Z,N) | 绘制等值图 |
| plt.vlines() | 绘制垂直图 |
| plt.stem(x,y,linefmt,markerfmt) | 绘制柴火图 |
| plt.plot_date() | 绘制数据日期 |
饼图的绘制
import matplotlib.pyplot as plt
labels = 'Frogs','Hogs','Dogs','Logs'
sizes = [15,30,45,10]
explode = (0,0.1,0,0)
plt.pie(sizes,explode=explode,labels = labels,autopct='%1.1f%%',shadow=False,startangle=90)
plt.show()
![![[Matplotlib库入门12.png]]](https://i-blog.csdnimg.cn/direct/e83b481f6bfc401ca621f43e287fc5f6.png)
直方图的绘制
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(10)
mu,sigma=100,20 #均值和标准差
a = np.random.normal(mu,sigma,size=100)
plt.hist(a,40,normed=1,histtype='stepfilled',facecolor='b',alpha=0.75)
#plt.hist(a,10,normed=1,histtype='stepfilled',facecolor='b',alpha=0.75)
plt.title('Histogram')
plt.show()
![![[Matplotlib库入门13.png]]](https://i-blog.csdnimg.cn/direct/c7c11b6f1ac24a6484f4987413850327.png)
绘制极坐标图
import matplotlib.pyplot as plt
import numpy as np
N = 10
theta = np.linspace(0.0,2*np.pi,N,endpoint=False)
radii = 10 * np.random.rand(N)
width = np.pi / 2*np.random.rand(N)
ax = plt.subplot(111, projection='polar')
bars = ax.bar(theta,radii,width=width,bottom=0.0)
for r,bar in zip(radii,bars):
bar.set_facecolor(plt.cm.viridis(r / 10.))
bar.set_alpha(0.5)
plt.show()
![![[Matplotlib库入门14.png]]](https://i-blog.csdnimg.cn/direct/894d60894d024b86a05a696f2eb8205b.png)
绘制散点图
import matplotlib.pyplot as plt
import numpy as np
fig,ax = plt.subplots()
ax.plot(10*np.random.randn(100),10*np.random.randn(100),'o')
ax.set_title('Simple Scatter')
plt.show()
![![[Matplotlib库入门15.png]]](https://i-blog.csdnimg.cn/direct/93372eb1ce2240eaa1632486cd5536b5.png)
引力波的绘制
import matplotlib.pyplot as plt
import numpy as np
from scipy.io import wavfile
rate_h,hstrain=wavfile.read(r"H1_Strain.wav","rb")
rate_l,lstrain=wavfile.read(r"L1_Strain.wav","rb")
reftime,ref_H1=np.genfromtxt('wf_template.txt').transpose()
htime_interval = 1/rate_h
ltime_interval = 1/rate_l
fig = plt.figure(figsize=(12,6))
#丢失信号起始点
htime_len = hstrain.shape[0]/rate_h
htime = np.arange(-htime_len/2, htime_len/2 , htime_interval)
plth = fig.add_subplot(221)
plth.plot(htime, hstrain, 'y')
plth.set_xlabel('Time (seconds)')
plth.set_ylabel('H1 Strain')
plth.set_title('H1 Strain')
ltime_len = lstrain.shape[0]/rate_l
ltime = np.arange(-ltime_len/2, ltime_len/2 , ltime_interval)
pltl = fig.add_subplot(222)
pltl.plot(ltime, lstrain, 'g')
pltl.set_xlabel('Time (seconds)')
pltl.set_ylabel('L1 Strain')
pltl.set_title('L1 Strain')
pltref = fig.add_subplot(212)
pltref.plot(reftime, ref_H1)
pltref.set_xlabel('Time (seconds)')
pltref.set_ylabel('Template Strain')
pltref.set_title('Template')
fig.tight_layout()
plt.savefig("Gravitational_Waves_Original.png")
plt.show()
plt.close(fig)
![![[Gravitational_Waves_Original.png]]](https://i-blog.csdnimg.cn/direct/c1ce4c9b91f0492d8f87ab17516f664e.png)
1497

被折叠的 条评论
为什么被折叠?



