用python快速绘制数据
我正试图用arduino绘制mpu6050 imu的数据。MPU6050发送数据的速度比plot快。Arduino代码从串行端口提供6个数据,即偏航、俯仰、横摇、ax、ay和az。我需要快速绘图的建议 Python代码:用python快速绘制数据,python,matplotlib,plot,arduino,serial-port,Python,Matplotlib,Plot,Arduino,Serial Port,我正试图用arduino绘制mpu6050 imu的数据。MPU6050发送数据的速度比plot快。Arduino代码从串行端口提供6个数据,即偏航、俯仰、横摇、ax、ay和az。我需要快速绘图的建议 Python代码: import serial import matplotlib.pyplot as plt #import matplotlib library from drawnow import * ser = serial.Serial('COM9', 115200) yaw =
import serial
import matplotlib.pyplot as plt #import matplotlib library
from drawnow import *
ser = serial.Serial('COM9', 115200)
yaw = 0.0
pitch =0.0
roll =0.0
ax =0.0
ay =0.0
az =0.0
o_yaw= [0]
o_pitch= [0]
o_roll= [0]
o_ax= [0]
o_ay= [0]
o_az= [0]
plt.ion()
cnt=0
def makeFig():
plt.ylim(-1000,1000)
plt.grid(True)
plt.ylabel('Magnitude')
plt.plot(olculen_ax, 'ro-', label='ax')
plt.plot(olculen_ay, 'bo-', label='ay')
plt.plot(olculen_az, 'go-', label='az')
plt.legend()
while True:
incoming=ser.readline()
if ("hand" in incoming):
incoming=incoming.split(":")
if len(incoming)==8:
yaw = float(incoming[1])
pitch = float(incoming[2])
roll = float(incoming[3])
ax = float(incoming[4])
ay = float(incoming[5])
az = float(incoming[6])
print "Split works"
else:
print incoming
o_ax.append(ax)
o_ay.append(ay)
o_az.append(az)
o_yaw.append(yaw)
o_pitch.append(pitch)
o_roll.append(roll)
drawnow(makeFig)
plt.pause(.00001)
cnt=cnt+1
if(cnt>50):
o_ax.pop(0)
o_ay.pop(0)
o_az.pop(0)
Arduino代码(我只是添加了loop.Code派生自):
void循环(){
如果(!dmpReady)返回;
而(!mpuinterupt&&fifoCount
在Matplotlib中实时打印?你买的电是有代价的。自动缩放、自动轴等。。。这一切都需要时间
一个更快的解决方案是使用Gtk之类的工具包,并使用GooCanvas之类的画布自己绘制
不过,您可以做一些事情来加快绘图速度
- 为什么要暂停声明李>
- 将通信拆分到另一个线程,并使绘图在准备就绪时采用以下示例(跳过输入队列中的值)
- 您正在添加,这使得绘图经常重新缩放。获取N个样本后,移除第一个样本
- 我相信可以使用MatPlotLib(不确定)在后台打印,然后不太频繁地复制到屏幕上
from pyqtgraph.Qt import QtGui, QtCore
import numpy as np
import pyqtgraph as pg
from pyqtgraph.ptime import time
import serial
app = QtGui.QApplication([])
p = pg.plot()
p.setWindowTitle('live plot from serial')
curve = p.plot()
data = [0]
raw=serial.Serial('COM9', 115200)
def update():
global curve, data
line = raw.readline()
if ("hand" in line):
line=line.split(":")
if len(line)==8:
data.append(float(line[4]))
xdata = np.array(data, dtype='float64')
curve.setData(xdata)
app.processEvents()
timer = QtCore.QTimer()
timer.timeout.connect(update)
timer.start(0)
if __name__ == '__main__':
import sys
if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
QtGui.QApplication.instance().exec_()
from pyqtgraph.Qt import QtGui, QtCore
import numpy as np
import pyqtgraph as pg
from pyqtgraph.ptime import time
import serial
app = QtGui.QApplication([])
p = pg.plot()
p.setWindowTitle('live plot from serial')
curve = p.plot()
data = [0]
raw=serial.Serial('COM9', 115200)
def update():
global curve, data
line = raw.readline()
if ("hand" in line):
line=line.split(":")
if len(line)==8:
data.append(float(line[4]))
xdata = np.array(data, dtype='float64')
curve.setData(xdata)
app.processEvents()
timer = QtCore.QTimer()
timer.timeout.connect(update)
timer.start(0)
if __name__ == '__main__':
import sys
if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
QtGui.QApplication.instance().exec_()