#python #matplotlib #plot #raspberry-pi #raspberry-pi3
Вопрос:
Я пытаюсь прочитать напряженность магнитного поля в Python, используя доску sense hat с raspberry pi 3b , и пытаюсь построить данные в реальном времени.
Если быть более точным, у меня есть 3 показания, сила поля по осям x, y и z датчика.
Поэтому мне нужно иметь три графика по одному для каждой силы оси. На этих графиках ось x должна «перемещаться» или обновляться, чтобы на чертеже отображался только определенный объем данных (скажем, последние 20 секунд показаний). Как в этом примере
До сих пор мне удавалось создавать три графика и считывать данные в режиме реального времени. Мои графики и код выглядят так:
#!/usr/bin/python
# -*- coding: utf-8 -*-
from sense_hat import SenseHat
import time
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
sense = SenseHat()
sense.clear()
x = []
y = []
z = []
# Our actual plot objects
#figures, (ax1, ax2, ax3) = plt.subplots(3, sharex=True, sharey=True)
figures, (ax1, ax2, ax3) = plt.subplots(3)
figures.suptitle("measures")
#ax1.set_title("X")
line, = ax1.plot(x, y, 'tab:orange')
ax1.axis([0,100, -400, 400])
#ax2.set_title("Y")
line2, = ax2.plot(x, y, 'tab:green')
ax2.axis([0,100, -400, 400])
#ax3.set_title("Z")
line3, = ax3.plot(x, y, 'tab:red')
ax3.axis([0,100, -400, 400])
#plt.axis([0, 4*np.pi, -4900, 4900])
def read_magneto(i):
raw = sense.get_compass_raw()
#print("x={x}uT y={y}uT z={z}uT".format(**raw))
# These are the readings from the sensor
Xreading = raw['x']
Yreading = raw['y']
Zreading = raw['z']
x.append(Xreading)
y.append(Yreading)
z.append(Zreading)
line.set_data(x, i)
line2.set_data(y, i)
line3.set_data(z, i)
#print("i: " str(i))
return line,
# Our animation object
ani = FuncAnimation(figures,
read_magneto,
frames=30,
interval=1)
# show plot
plt.show()
Используя line.set_data(x, i)
я думал, что мои показания по оси x будут нанесены на ось x графика, в то время как я буду осью y. Однако это работает не так, как я ожидал. Как я могу это исправить? Я ожидал, что сюжеты будут выглядеть примерно так:
Спасибо