Matplotlib库基础图表函数及引力波的绘制实例
pyplot基本图表函数概述
pyplot饼图的绘制
plt.pie()
lables指的是饼图的标签
sizes指的是对应的尺寸
explode让第二个30%突出0.1
autopct中间显示百分数的方式
shadow=False二维饼图不带阴影
startangle=90饼图的起始角度
加plt.axis('equal')可以让饼图成为一个正圆形的饼图
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.axis('equal')
plt.show()
pyplot直方图的绘制
plt.hist参数值:
hist的参数非常多,但常用的有以下6个,只有第一个是必须的,后面5个可选
x: 作直方图所要用的数据,必须是一维数组。多维数组可以先进行扁平化再作图
bins: 直方图的柱数,可选项,默认为10
normed: 是否将得到的直方图向量归一化。默认为0
facecolor: 直方图颜色
edgecolor: 直方图边框颜色
alpha: 透明度
histtype: 直方图类型,‘bar’, ‘barstacked’, ‘step’, ‘stepfilled’
mu,sigma=100,20
a=np.random.normal(mu,sigma,size=100)#均值和方差正态分布
plt.hist(a,40,histtype='bar',facecolor='r',edgecolor='g',alpha=0.75)
plt.title('Histogram')
plt.show()
pyplot极坐标的绘制
这段代码使用Python中的matplotlib库生成一个极坐标条形图。以下是代码的详细解释:
导入matplotlib.pyplot库并将其命名为plt,导入numpy库并将其命名为np。
将n设置为20,这将是绘图中的条形数目。
使用np.linspace()创建一个在0和2π之间均匀分布的长度为n的数组,并将其存储在theta中。
创建一个长度为n的随机值数组,每个值在0和10之间,然后将其乘以10,将其存储在redii中。
创建一个长度为n的随机值数组,每个值在0和π/4之间,然后将其乘以π/4,将其存储在width中。
使用plt.subplot()创建一个极坐标投影的子图,传入参数111和projection='polar'。
通过调用ax.bar()并传入theta、redii、width和bottom参数来创建一个bars对象。
遍历bars中的每个bar,并根据其对应的r值(缩放为10的最大值)从viridis colormap中选择颜色,
并将其alpha设置为0.5。
使用plt.show()显示图形。
总体而言,该代码创建了一个随机的极坐标条形图,其中每个条形的半径和宽度是随机生成的,并
且每个条形的颜色取决于其半径值,使用了一个颜色映射。
import matplotlib.pyplot as plt
import numpy as np
n=20
theta=np.linspace(0.0,2*np.pi,n,endpoint=False)
redii=10*np.random.rand(n)
width=np.pi/4*np.random.rand(n)
ax=plt.subplot(111,projection='polar')
bars=ax.bar(theta,redii,width=width,bottom=0.0)
for r,bar in zip(redii,bars):bar.set_facecolor(plt.cm.viridis(r/10.))bar.set_alpha(0.5)
plt.show()
pyplot散点图的绘制
fig,ax=plt.subplots()
ax.plot(10*np.random.randn(100),10*np.random.randn(100),'o')
ax.set_title('Simple Scatter')
plt.show()
1.调用plt.subplots()函数创建一个新的Figure对象和一个包含单个子图的Axes对象,并将它们分别存储在fig和ax变量中。
2.调用np.random.randn(100)函数生成一个长度为100的随机数数组,并将每个值乘以10,得到x坐标的值。
3.调用np.random.randn(100)函数生成另一个长度为100的随机数数组,并将每个值乘以10,得到y坐标的值。
4.调用ax.plot()函数并传入x和y坐标数组,将散点图绘制在坐标轴上。
5.调用ax.set_title()函数并传入字符串'Simple Scatter',将坐标轴的标题设置为'Simple Scatter'。
6.调用plt.show()函数显示图形。
引力波的绘制
import wave
import numpy as np
import matplotlib.pyplot as pltwith wave.open("H1_Strain.wav", 'rb') as h_wave:rate_h = h_wave.getframerate()h_frames = h_wave.getnframes()h_strain = np.frombuffer(h_wave.readframes(h_frames), dtype=np.int16)with wave.open("L1_Strain.wav", 'rb') as l_wave:rate_l = l_wave.getframerate()l_frames = l_wave.getnframes()l_strain = np.frombuffer(l_wave.readframes(l_frames), dtype=np.int16)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 = len(h_strain)/rate_h
htime = np.arange(-htime_len/2, htime_len/2, htime_interval)
plth = fig.add_subplot(221)
plth.plot(htime, h_strain, 'y')
plth.set_xlabel('Time (seconds)')
plth.set_ylabel('H1 Strain')
plth.set_title('H1 Strain')ltime_len = len(l_strain)/rate_l
ltime = np.arange(-ltime_len/2, ltime_len/2, ltime_interval)
pltl = fig.add_subplot(222)
pltl.plot(ltime, l_strain, '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)
引入需要的Python库
import wave
import numpy as np
import matplotlib.pyplot as plt
其中:
wave: Python自带的读取.wav音频文件的库。
numpy: Python科学计算的基础库,用于处理数值数据。
matplotlib: Python中最流行的绘图库,用于数据可视化。
读取H1_Strain.wav和L1_Strain.wav两个音频文件,获取采样率和采样数据。
with wave.open("H1_Strain.wav", 'rb') as h_wave:rate_h = h_wave.getframerate()h_frames = h_wave.getnframes()h_strain = np.frombuffer(h_wave.readframes(h_frames), dtype=np.int16)with wave.open("L1_Strain.wav", 'rb') as l_wave:rate_l = l_wave.getframerate()l_frames = l_wave.getnframes()l_strain = np.frombuffer(l_wave.readframes(l_frames), dtype=np.int16)
其中:
with ... as ...是Python文件IO操作的常用方式,确保文件读取完成后自动关闭。
getframerate():获取音频的采样率。
getnframes():获取音频的采样数据长度。
np.frombuffer():将读取的二进制数据转换为numpy数组,以便后续的处理和绘图。
读取引力波数据的参考波形数据,并将其转置。
reftime, ref_H1 = np.genfromtxt('wf_template.txt').transpose()
其中:
np.genfromtxt():从txt文件中读取数据,返回一个numpy数组。
计算时间间隔和时间范围,并在matplotlib中创建画布。
makefile
htime_interval = 1/rate_h
ltime_interval = 1/rate_l
fig = plt.figure(figsize=(12, 6))
其中:
figsize是画布的大小,用于调整图片的宽度和高度。
计算H1和L1的时间序列,用于绘制两个引力波信号的波形图。
htime_len = len(h_strain)/rate_h
htime = np.arange(-htime_len/2, htime_len/2, htime_interval)
plth = fig.add_subplot(221)
plth.plot(htime, h_strain, 'y')
plth.set_xlabel('Time (seconds)')
plth.set_ylabel('H1 Strain')
plth.set_title('H1 Strain')ltime_len = len(l_strain)/rate_l
ltime = np.arange(-ltime_len/2, ltime_len/2, ltime_interval)
pltl = fig.add_subplot(222)
pltl.plot(ltime, l_strain, 'g')
pltl.set_xlabel('Time (seconds)')
pltl.set_ylabel('L1 Strain')
pltl.set_title('L1 Strain')
其中:
len()获取numpy数组的长度,即采样点数。
np.arange()生成等间隔的时间序列,以便绘制