Python-实时传感器数据绘图

问题描述

我从mpu6050加速度计获取传感器数据。传感器为我提供了x,y和z轴的加速度。我目前正试图绘制x加速度与时间的关系图。理想情况下,我将全部图形化,但是我无法使单个x数据与时间图正常工作,因此我现在只关注它。我的代码如下:

from mpu6050 import mpu6050
import time
import os
from time import sleep
from datetime import datetime as dt
import matplotlib.pyplot as plt
import matplotlib.animation as animation
mpu = mpu6050(0x68)

#create csv file to save the data
file = open("/home/pi/Accelerometer_data.csv","a")
i=0
if os.stat("/home/pi/Accelerometer_data.csv").st_size == 0:
        file.write("Time,X,Y,Z\n")

# Create figure for plotting
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
xs = []
ys = []


def animate(i,xs,ys):

    # Read acceleration from mpu6050
    accel_data = mpu.get_accel_data()
    
    #append data on the csv file
    i=i+1
    Now = dt.Now()
    file.write(str(Now)+","+str(accel_data['x'])+","+str(accel_data['y'])+","+str(accel_data['z'])+"\n")
    file.flush()

    # Add x and y to lists
    xs.append(dt.Now().strftime('%H:%M:%s.%f'))
    ys.append(str(accel_data['x']))
    
    # Limit x and y lists to 20 items
    xs = xs[-10:]
    ys = ys[-10:]

    # Draw x and y lists
    ax.clear()
    ax.plot(xs,ys)

    # Format plot
    plt.xticks(rotation=45,ha='right')
    plt.subplots_adjust(bottom=0.30)
    plt.title('mpu6050 X acceleration over Time')
    plt.ylabel('X-acceleration')

#show real-time graph
ani = animation.FuncAnimation(fig,animate,fargs=(xs,ys),interval=1000)
plt.show()

csv文件保存准确的数据。该图会随时间更新,但结果却是一条直线。这是因为y轴如何更新。见下图:

enter image description here

如您所见,y轴不按升序排列。有人可以帮我解决吗?另外,如何将图表y轴上的数字四舍五入为5个有效数字?我尝试使用round()函数,但它不允许我这样做。

谢谢!

解决方法

要使y轴升序,我认为您必须使ys浮点值而不是字符串值:ys.append(float(accel_data['x'])) 要将y轴上的数字四舍五入到5个有效数字,您可以检查以下问题的答案:Matplotlib: Specify format of floats for tick labels