Рисовать сейчас и Matplotlib
В настоящее время я работаю над проектом, который предполагает брать аналоговые показания и отображать их в реальном времени на графике. Таким образом, чтобы завершить это, я запускаю фоторезистор через аналоговый порт Arduino и читаю эти данные через python 3.4.3. На стороне питона у меня есть maplotlib и drawnow. Код, показанный ниже, будет отображать первый маркер данных, который будет считывать резистор, но не будет обновлять его в реальном времени. Однако, если я изменю сопротивление и затем перезапущу программу, она будет постоянно отображать новое значение. То, что я хочу, это изменить значение на графике при изменении значения фоторезистора.
import serial # import from pySerial
import numpy # import library from Numerical python
import matplotlib.pyplot as plt # import Library from matplotlib
from drawnow import drawnow # import lib from drawnow
ConF = [] # create an empty array for graphing
ArduinoData = serial.Serial('com3',9600) # set up serial connection with arduino
plt.ion() # tell matplotlib you want interactive mode to plot data
cnt = 0
def makeFig(): # creat a function to make plot
plt.plot(ConF, 'go-')
while True: # loop that lasts forever
while (ArduinoData.inWaiting()==0): # wait till there is data to plot
pass # do nothing
arduinoString = ArduinoData.readline()
dataArray = arduinoString
Con = float(arduinoString) # turn string into numbers
ConF.append(Con) # addinf to the array.
drawnow(makeFig) # call draw now to update
plt.pause(.000001)
cnt=cnt+1
if(cnt>50):
ConF.pop(0)
Я не уверен, где моя ошибка, нет сообщения об ошибке... он просто отображает одну и ту же точку данных снова и снова. Любая помощь будет приветствоваться.
1 ответ
Что-то вроде:
fig, ax = plt.subplots()
ln, = ax.plot([], [], 'go-')
while True:
x, y = get_new_data()
X, Y = ln.get_xdata(), ln.get_ydata()
ln.set_data(np.r_[X, x], np.r_[Y, y])
fig.canvas.draw()
fig.canvas.flush_events()
должен сделать свое дело.