Tôi có một số cảm biến gắn với Raspberry Pi của tôi; Tôi đang gửi dữ liệu của họ đến máy tính của tôi hai lần một giây bằng cách sử dụng TCP. Tôi muốn liên tục vẽ đồ thị các giá trị này bằng cách sử dụng matplotlib. Phương pháp tôi hiện đang sử dụng có vẻ không hiệu quả (tôi đang xóa subplot và vẽ lại nó mỗi lần) và có một số nhược điểm không mong muốn (quy mô được điều chỉnh mọi thời gian; Tôi muốn nó ở lại từ 0,0 - 5,0). Tôi biết có một cách để làm điều này mà không cần phải rõ ràng và vẽ lại nhưng dường như không thể tìm ra. Sau đây là mã hiện tại của tôi:Tự động cập nhật âm mưu thanh trong matplotlib
import socket
import sys
import time
from matplotlib import pyplot as plt
# Create a TCP/IP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# Connect the socket to the port where the server is listening
server_address = ('192.168.0.10', 10000)
print >>sys.stderr, 'connecting to %s port %s' % server_address
sock.connect(server_address)
# Initial setup for the bar plot
plt.ion()
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
x = [1,2,3]
labels = ['FSR', 'Tilt', 'IR']
ax.set_xticklabels(labels)
y = [5.0,5.0,5.0]
ax.bar(x,y)
fig.autofmt_xdate()
plt.draw()
#Grab and continuously plot sensor values
try:
for i in range(300):
amount_received = 0
amount_expected = len("0.00,0.00,0.00")
# Receive data from RasPi
while amount_received < amount_expected:
data = sock.recv(14)
amount_received += len(data)
print >>sys.stderr, 'received "%s"' % data
# Plot received data
y = [float(datum) for datum in data.split(',')]
ax.clear()
ax.bar(x,y)
plt.draw()
time.sleep(0.5)
#Close the socket
finally:
print >>sys.stderr, 'closing socket'
sock.close()
Rất cám ơn vì điều này, tôi sẽ xem xét để thực hiện điều này như là một bản nâng cấp. Tuy nhiên, tôi vẫn muốn biết nếu có một sửa chữa đơn giản cho vấn đề ban đầu của tôi với việc cập nhật biểu đồ matplotlib mà không cần thanh toán bù trừ? – hfaran