data = uart_r.readline().decode().strip() data_list = data.split() float_list = float(data_list[0]) self.data.append(float_list) self.data = self.data[-50:] self.data_line.setData(np.arange(len(self.data)), self.data) 用这个函数实时显示串口接收的最新的50个数据绘制的折线图,但是现在显示的折线图中x轴没有增长,怎么让x轴在每次更新折线图显示的时候都有所增加?
时间: 2023-11-29 16:04:27 浏览: 22
在更新折线图时,可以将x轴的范围同时更新,让它的最大值随着数据的增加而不断增加。可以在代码中添加如下行:
```
self.plotWidget.setXRange(len(self.data)-50, len(self.data))
```
其中`self.plotWidget`代表绘图窗口的对象,`len(self.data)`表示数据的总长度,`len(self.data)-50`表示最小的x轴坐标值,也就是最早的数据在x轴上的位置。这样,每次更新折线图时,x轴的范围都会自动调整,保证最新的数据都在可视范围内。
相关问题
data = uart_r.readline().decode().strip() data_list = data.split() float_list = float(data_list[0]) self.data.append(float_list) self.data = self.data[-50:] self.data_line.setData(np.arange(len(self.data)), self.data) 用这个函数实时显示串口接收的最新的50个数据绘制的折线图,但是现在显示的折线图中x轴没有变化,x轴可以和显示的折线图的数据实时更新变化吗?
可以的。根据代码中的`np.arange(len(self.data))`,横坐标是根据`self.data`的长度来生成的,因此只要在每次添加新数据时重新设置横坐标即可。具体来说,可以将`setData`的第一个参数改为一个变量,如`x_axis`,在每次更新数据时,先将`x_axis`更新为新的横坐标,再将`x_axis`和`self.data`作为参数调用`setData`方法。修改后的代码如下:
```
data = uart_r.readline().decode().strip()
data_list = data.split()
float_list = float(data_list[0])
self.data.append(float_list)
self.data = self.data[-50:]
x_axis = np.arange(len(self.data))
self.data_line.setData(x_axis, self.data)
```
这样,每次更新数据时,折线图的横坐标就会根据`self.data`的长度重新生成,实现了实时更新变化。
想要吧接收标志位‘S'和结束标志位’E'去掉,开始结束换成40秒的时间 uart_r = serial.Serial("COM8", 115200) # Wait the beging flag print("Please send char S to start receiving:") uart_r.timeout = None read_byte = uart_r.read(1) print("received: ", read_byte) while (b'S' != read_byte): read_byte = uart_r.read(1) print("received: ", read_byte) print("Receiving data: ") received_bytes_list = [] uart_r.timeout = 60 read_byte = uart_r.read(1) while (None != read_byte) and (b'E' != read_byte): print(".", end="") received_bytes_list.append(read_byte.decode()) read_byte = uart_r.read(1) if (None == read_byte): print("Warning: timeout!") if (b'E' == read_byte): print("Received endflag!") # Save to Excel file # print('received_bytes_list: ', received_bytes_list) received_bytes = ''.join(received_bytes_list) # print('received_bytes: ', received_bytes) received_data = received_bytes.split() # print('received_data:', received_data) received_data_8 = [received_data[i: i + 8] for i in range(0, len(received_data), 8)] # print('received_data_8:', received_data_8) df = pd.DataFrame(columns=['0', '1', '2', '3', '4', '5', '6', '7']) for i, str in enumerate(received_data_8): print("Write to excel line :", i, str) if (len(str) < 8): print("Populate data.") str += [0] * (8 - len(str)) df.loc[i] = str # .insert(0, 'none') df.to_excel('%s.xlsx' % TIME) uart_r.close()
好的,你可以这样修改代码:
```python
uart_r = serial.Serial("COM8", 115200)
print("Receiving data: ")
received_bytes_list = []
start_time = time.time()
while (time.time() - start_time <= 40):
read_byte = uart_r.read(1)
if read_byte != b'':
print(".", end="")
received_bytes_list.append(read_byte.decode())
if len(received_bytes_list) == 0:
print("Warning: timeout!")
else:
print("Received data successfully!")
# Save to Excel file
received_bytes = ''.join(received_bytes_list)
received_data = received_bytes.split()
received_data_8 = [received_data[i: i + 8] for i in range(0, len(received_data), 8)]
df = pd.DataFrame(columns=['0', '1', '2', '3', '4', '5', '6', '7'])
for i, str in enumerate(received_data_8):
print("Write to excel line:", i, str)
if (len(str) < 8):
print("Populate data.")
str += [0] * (8 - len(str))
df.loc[i] = str
df.to_excel('%s.xlsx' % TIME)
uart_r.close()
```
这段代码去掉了接收标志位'S'和结束标志位'E',而是通过计时器来控制接收时间,时间为40秒。如果在规定时间内没有接收到任何数据,将会输出“Warning: timeout!”的提示信息;如果接收到数据,将会输出“Received data successfully!”的提示信息,并将数据保存到Excel文件中。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)