如何解决错误并显示图表?

2024-04-25 23:47:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我现在把信号从Aduino转换到频域。(fft)但同样的错误不断出现。我不明白错误的原因。你能解释一下错误的原因吗?你知道吗

这就是错误

PS C:\Users\xoska\Documents\workplace> cd 'c:\Users\xoska\Documents\workplace'; ${env:PYTHONIOENCODING}='UTF-8'; ${env:PYTHONUNBUFFERED}='1'; & 'C:\Users\xoska\AppData\Local\Programs\Python\Python37\python.exe' 'c:\Users\xoska\.vscode\extensions\ms-python.python-2019.11.49689\pythonFiles\ptvsd_launcher.py' '--default' '--client' '--host' 'localhost' '--port' '54326' 'c:\Users\xoska\Documents\workplace\test.py' 
Traceback (most recent call last):
  File "c:\Users\xoska\Documents\workplace\test.py", line 99, in update
    curve2.setData(frequencia[:int(guarda/2)], abs(np.real(data[:int(guarda/2)])))
  File "C:\Users\xoska\AppData\Local\Programs\Python\Python37\lib\site-packages\pyqtgraph\graphicsItems\PlotDataItem.py", line 461, in setData
    self.updateItems()
  File "C:\Users\xoska\AppData\Local\Programs\Python\Python37\lib\site-packages\pyqtgraph\graphicsItems\PlotDataItem.py", line 487, in updateItems
    self.curve.setData(x=x, y=y, **curveArgs)
  File "C:\Users\xoska\AppData\Local\Programs\Python\Python37\lib\site-packages\pyqtgraph\graphicsItems\PlotCurveItem.py", line 307, in setData
    self.updateData(*args, **kargs)
  File "C:\Users\xoska\AppData\Local\Programs\Python\Python37\lib\site-packages\pyqtgraph\graphicsItems\PlotCurveItem.py", line 353, in updateData
    raise Exception("X and Y arrays must be the same shape--got %s and %s." % (self.xData.shape, self.yData.shape))
Exception: X and Y arrays must be the same shape--got (100,) and (20,).

这是Arduino密码。它是打印值的简单来源。你知道吗

#include <math.h>

void setup() {

  Serial.begin(9600);

}

void loop() {
  for(float d = 0; d < 1; d+=0.001){
    float resultado = 7*sin(15 * 2 * PI * d) + 3*sin(13 * 2 * PI * d);
    Serial.println(resultado, 3);
                       // Sampling rate is 1/T -> 2000Hz
  }
} 

这是python代码。我用的是pyqtgraph。你知道吗

import sys
import glob
import serial
import pyqtgraph as pg
from pyqtgraph.Qt import QtCore, QtGui
import numpy as np
from collections import deque  # import a "circular" list
from threading import Thread, Lock

arduinoData = serial.Serial('com5', 9600)  # 115200


freq = 2000            # 1/T
guarda = 200             # 200
#r = range(0, int(freq/2+1), int(freq/guarda))
frequencia = np.fft.fftfreq(guarda, d=1/freq)

acelx = deque([], maxlen=guarda)

win = pg.GraphicsWindow()
win.setWindowTitle('Espectro')
pg.setConfigOption('foreground', 'w')

p2 = win.addPlot()
linha4 = pg.mkPen((255, 0, 0), width=2)
p2.addLegend(offset=(10, 5))

curve2 = p2.plot(acelx,
                 pen=linha4,
                 name="<span style='color: #ffffff; font-weight: bold; font-size: 12px'>Amplitude</span>")

p2.setRange(yRange=[0, 1000], xRange=[0, int(freq/2)])
p2.setLabel('bottom',
            text="<span style='color: #ffffff; font-weight: bold; font-size: 12px'>Frequency (Hz)</span>")
p2.showGrid(x=False, y=True)

i = 0
data = []
lock = Lock()

def data_input():
    global i, data
    for line in arduinoData:
        try:
            i+=1
            acelx.append(float(line))
            with lock:
                if i > len(acelx):
                    data = np.fft.fft(acelx)
        except ValueError:
            pass

# start the data input thread. This will run in the background unaffected by the GUI.
t = Thread(target=data_input)
t.daemon = True
t.start()

def update():
    if i > len(acelx):
        curve2.setData(frequencia[:int(guarda/2)], abs(np.real(data[:int(guarda/2)])))

timer = QtCore.QTimer()
timer.timeout.connect(update)
timer.start(0)

if __name__ == '__main__':
    import sys
    QtGui.QApplication.instance().exec_()

Tags: inpyimportdatalocallineusersappdata
1条回答
网友
1楼 · 发布于 2024-04-25 23:47:59

Exception: X and Y arrays must be the same shape got (100,) and (20,)

错误信息非常清楚。您尝试绘制一个图形,并提供100 x值和20 y值。你知道吗

这显然行不通。你知道吗

修复此错误

X and Y arrays must be the same shape

相关问题 更多 >

    热门问题