我是Python和matplotlib的初学者,广泛的搜索没有产生任何有用的东西,所以这里有:
我从设备获得了data
(每秒256个样本)。
下面的代码将重新创建(和绘制)数据集。
# Import modules
import numpy as np
import matplotlib.pyplot as plt
# Set variable
Fs = 256
# Create list with random measurements
np.random.seed(1)
data = [np.random.uniform(-20000, 20000) for i in range(10*Fs)]
#plt.plot(data, color = "black", linewidth = 0.3); plt.show()
对于data
,我计算了每秒的几个值,即256个数据点。每一秒都有一组这些数字。
下面的代码将为其中3个数字创建一个数据集,称为sig_val
s。
# Create lists with random sig_values with length of 1/Fs of measurements
sig_vals1 = [np.random.uniform(0, 1) for i in range(int(len(data)/Fs))]
sig_vals2 = [np.random.uniform(0, 1) for i in range(int(len(data)/Fs))]
sig_vals3 = [np.random.uniform(0, 1) for i in range(int(len(data)/Fs))]
目标是制作一个显示
的叠加图答案 0 :(得分:2)
这样的事情可能就是你所追求的。它假设两个数据集都在10秒的相同范围内展开。彩色编码信号以3×10矩阵连接,可以使用import numpy as np
import matplotlib.pyplot as plt
# Set variable
Fs = 256
# Create list with random measurements
np.random.seed(1)
data = np.random.uniform(-20000, 20000, size=10*Fs)
t = np.linspace(0,10,len(data))
sig_vals1 = np.random.uniform(0, 1, size=int(len(data)/Fs))
sig_vals2 = np.random.uniform(0, 1, size=int(len(data)/Fs))
sig_vals3 = np.random.uniform(0, 1, size=int(len(data)/Fs))
sig = np.c_[sig_vals1,sig_vals2,sig_vals3].T
T, s = np.meshgrid(np.linspace(0,10,int(len(data)/Fs)+1),np.arange(4))
plt.pcolormesh(T,s,sig)
plt.yticks(np.arange(.5,3,1), ["Signal{}".format(i+1) for i in range(3)])
ax2 = plt.gca().twinx()
ax2.plot(t, data, color = "w", linewidth = 0.3, alpha=0.6)
ax2.margins(0)
plt.show()
绘制。
function show(){
$("#example").DataTable({
serverSide: true,
processing: true,
columns : [
{ data : 'FirstName' },
{ data : 'LastName' }
],
ajax: {
url: "https://api.myjson.com/bins/384sr",
dataSrc : ''
}
});
}
show();
答案 1 :(得分:1)
你的问题是一个尺度问题...当你绘制谱图时,x轴在0-8秒范围内,y轴在Fs / 2 = 128范围内,当你的数据在[-20000:对于y轴为20000,在x轴上为2560 ...因此,您应该将数据缩放到同一图表中进行绘图。
你可以这样做:
# Import modules
import numpy as np
import matplotlib.pyplot as plt
# Set variable
Fs = 256
# Create list with random measurements
np.random.seed(1)
data = [np.random.uniform(-20000, 20000) for i in range(10*Fs)]
#plt.plot(data, color = "black", linewidth = 0.3); plt.show()
# Create lists with random sig_values with length of 1/Fs of measurements
sig_vals1 = [np.random.uniform(0, 1) for i in range(int(len(data)/Fs))]
sig_vals2 = [np.random.uniform(0, 1) for i in range(int(len(data)/Fs))]
sig_vals3 = [np.random.uniform(0, 1) for i in range(int(len(data)/Fs))]
这里如何绘制叠加:
plt.specgram(data, Fs=Fs) #plot spectrogram
t=[float(i)/Fs for i in range(10*Fs)] #create time vector
data2=[((float(i)/40000)+0.5)*Fs/2 for i in data] # scale data between [0:128] to overlay spectrogram
plt.plot(t, data2, color = "black", lw=0.3) # plot scaled data
plt.show()
但也许最好创建子图并保留原始数据:
ax1 = plt.subplot(211)
plt.specgram(data, Fs=Fs)
plt.specgram(data, Fs=Fs)
plt.subplot(212 )
plt.plot(t, data, color = "black", lw=0.3)
plt.show()
编辑:
使用imshow()
:
tot=[sig_vals1, sig_vals2,sig_vals3]
t=[float(i)/Fs for i in range(10*Fs)]
data2=[((float(i)/40000)+0.5)*2 for i in data]
plt.plot(t, data2, color = "black", lw=0.3)
plt.imshow(tot)
plt.show()