Matplotlib绘制传感器数据时折线不显示仅散点正常的问题求助
解决Matplotlib绘制TE FX29传感器数据时折线不显示的问题
问题根源
你当前的代码在每次循环中调用plt.plot(t, LBS_DATA_SENSOR1, 'c-')时,仅绘制单个孤立数据点。折线图需要至少两个连续的点才能生成线段,而散点图(c.)只需单个点即可显示,因此出现散点正常、折线无显示的现象。
解决方案
维护存储历史数据的列表,每次循环追加新的时间和数据值,再基于完整数据集绘制折线。这样Matplotlib能将连续的点连接成线条。
修改后的代码
#TE FX29 load cell sensor #set up digital io import matplotlib.pyplot as plt import RPi.GPIO as IO IO.setwarnings(False) IO.setmode (IO.BCM) IO.setup(19,IO.OUT) #set up i2c import time import smbus from time import sleep bus = smbus.SMBus(1) channel = 1 # 初始化存储历史数据的列表 t_list = [] lbs_list = [] plt.figure() #Condition sensor for continuous measurements LOAD_SENSOR_ADDRESS=0x28 dummy_command=0x00 offset=1000 LOAD_SENSOR_DATA=bus.read_byte(LOAD_SENSOR_ADDRESS) running_max = 0 t = 0 #take continuous measurements and report while 1: bus.write_byte(LOAD_SENSOR_ADDRESS,dummy_command) LOAD_SENSOR_DATA=bus.read_i2c_block_data(LOAD_SENSOR_ADDRESS,dummy_command,2) LBS_DATA_SENSOR1=((LOAD_SENSOR_DATA[0]&63)*2**8 + LOAD_SENSOR_DATA[1] - offset)*100/14000 if LBS_DATA_SENSOR1 > running_max: running_max = LBS_DATA_SENSOR1 # 将新数据追加到列表 t_list.append(t) lbs_list.append(LBS_DATA_SENSOR1) # 基于完整数据集绘制折线 plt.clf() # 清除当前绘图,避免重叠 plt.plot(t_list, lbs_list, 'c-') plt.xlim(0, t+1) plt.ylim(0, running_max + 10) plt.pause(0.01) t += .01
关键说明
- 数据持久化:用
t_list和lbs_list存储所有采集到的时间和压力数据,确保每次绘制都有连续的点集 - 清除旧绘图:使用
plt.clf()清除上一次的绘图,避免线条重叠 - 性能优化(可选):如果循环次数较多,可改用
Line2D对象的set_data方法更新数据,减少重复绘图的开销:
# 初始化时创建线条对象 line, = plt.plot([], [], 'c-') # 循环内更新数据 line.set_data(t_list, lbs_list) plt.xlim(0, t+1) plt.ylim(0, running_max + 10) plt.pause(0.01)
内容的提问来源于stack exchange,提问作者Peter Keller
相关产品推荐
相关产品推荐

