<p>我正在尝试做一个程序,能够转换一个不同长度的csv到一个数据帧。然后,我试图绘制数据帧的特定列,x值是索引除以1000(采样率是1000Hz)。在</p>
<p>但是,我有一个奇怪的交互,它以线性的方式绘制列的值,并将该点标记为一个值。它可能会绘制索引值,但我不确定,因为输出是一条曲线。
我使用的当前数据集是大约12台设备的5000多个数据点(所有这些都是同时采样的)。我将展示下面的数据片段。在</p>
<p>输出如下:
<a href="https://i.stack.imgur.com/H0jZM.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/H0jZM.png" alt="enter image description here"/></a>
右图是左图值的fft。在</p>
<p>输出应该是这样的:
<a href="https://i.stack.imgur.com/xlgk0.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/xlgk0.png" alt="enter image description here"/></a>
右边的图形对两者都是相同的,这是正确的输出。这告诉我,左图的图有点奇怪,但是整个代码没有错。在</p>
<p>这是我的代码:</p>
<pre><code>from scipy import fftpack
from matplotlib import pyplot as plt
import numpy as np
import pandas as pd
import csv
temp = []
samplerate = 1000
with open('C:/Users/sword/Anaconda3/envs/exceltest/RF_SubjP02_Free_STATIC_TR02.csv', 'r') as csvfile:
csvreader = csv.reader(csvfile, delimiter=',')
for row in csvreader:
if csvreader.line_num == 3:
temp.<a href="https://www.cnpython.com/list/append" class="inner-link">append</a>(row)
if csvreader.line_num >= 6:
if row:
temp.append(row)
else:
break
df = pd.DataFrame(temp) #turns the array into a dataframe
df.columns = df.iloc[0] #sets the column names as the first row
df = df.drop(0) #drops the first row since it is now a duplicate of the column names
emg1 = df['Noraxon Desk Receiver - EMG1']
horiz = np.arange(0,len(emg1)/samplerate,1/samplerate) #getting the time domain in seconds
emgfft = fftpack.fft(emg1, horiz.size) #fft of the emg
emgfftabs = np.abs(emgfft) #absolute value of the fft values
xf = fftpack.fftfreq(horiz.size, (len(emg1) / samplerate) / samplerate) #frequency range
plt.figure()
plt.subplot(1,2,1)
plt.plot(horiz, emg1) #tried this one and the one below with the same result, both gave the wrong curved graph from the first picture
plt.plot(df['Noraxon Desk Receiver - EMG1']) #I didn't use both at the same time
ticks = plt.yticks(df['Noraxon Desk Receiver - EMG1'].values[::100]) #this is just here to make it readable, otherwise the y labels are a solid black bar
plt.subplot(1,2,2)
plt.plot(xf[0:len(xf)//2],2*emgfftabs[0:len(emgfftabs)//2])
plt.show()
</code></pre>
<p>注意'Noraxon Desk Receiver-EMG1'是我在csv文件中将其重命名为'EMG1'之前的原始列名。在</p>
<p>下面是一个数据集示例</p>
<p><a href="https://i.stack.imgur.com/ujNBA.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/ujNBA.png" alt="enter image description here"/></a></p>
<p>emg1的值可能有助于了解</p>
<p><a href="https://i.stack.imgur.com/otNgf.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/otNgf.png" alt="enter image description here"/></a></p>
<p>这个指数似乎与我所能判断的数值不可分离。emg1的数据类型最终是“object”。我尝试过使用“.tolist()”,但也没用。在</p>
<p>任何帮助解决这个问题将不胜感激!在</p>