Нет даты и времени X Ось Matplotlib

Я написал этот код, и он работает, но я не могу видеть дату / время на оси X. Я использую matplotlib 2.1.0 и python3. Я создал график для отображения данных в реальном времени от датчика Arduino. Я просто хотел добавить дату и время, используя встроенный модуль datetime в Python3. Код выполняется, но данных по оси X нет. Я хочу знать, почему код не работает. Я указал координаты ax и y, чтобы получить дату из операционной системы. Это график в реальном времени, который перемещается при изменении температуры датчиков. Я видел другой вопрос StackOverFlow о подобной проблеме. У меня уже есть эта строка plt.plot(x, y) в моем коде. Я могу настроить ось X с датой в статическом графике без проблем.

import serial
import time
import datetime
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from drawnow import *


date_list = []
sensor1 = []
sensor2 = []
sensor3 = []

x = [datetime.datetime.strptime(d, '%Y-%m-%d %H:%M:%S').date() for d in date_list]
y = range(len(x))

arduino_data = serial.Serial('/dev/ttyACM0', 9600, timeout=1)
time.sleep(4)

plt.ion()

counter = 0


def make_figure():
    plt.title("Plot")
    plt.grid(True)
    plt.ylabel("Fahrenheit")
    plt.xlabel("Seconds")

    plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d %H:%M:%S'))
    plt.gca().xaxis.set_major_locator(mdates.DayLocator())
    plt.plot(x, y)
    plt.gcf().autofmt_xdate()

    plt.ylim(50, 85)
    plt.plot(sensor1, 'ro-', label="sensor1")
    plt.legend(loc='upper left')

    plt2 = plt.twinx()
    plt.ylim(50, 85)

    plt2.plot(sensor2, 'bo-', label="sensor2")
    plt.legend(loc='upper center')

    plt3 = plt.twinx()
    plt.ylim(50, 85)
    plt3.plot(sensor3, 'go-', label="sensor3")
    plt.legend(loc='upper right')


while True:
    while (arduino_data.inWaiting() == 0):
        pass

    arduino_string = arduino_data.readline().decode('ascii')
    data_array = str(arduino_string).split(' ')
    time_now = datetime.datetime.today()
    date_time = datetime.datetime.strftime(time_now, "%Y-%m-%d %H:%M:%S")
    s1 = (str(data_array[1]))
    s2 = (str(data_array[2]))
    s3 = (str(data_array[3]))
    print(date_time, s1, s2, s3)
    date_list.append(date_time)
    sensor1.append(float(s1))
    sensor2.append(float(s2))
    sensor3.append(float(s3))
    drawnow(make_figure)
    plt.pause(.05)
    counter += 1

    if (counter > 100):
        date_list.pop(0)
        sensor1.pop(0)
        sensor2.pop(0)
        sensor3.pop(0)

Вот некоторый рабочий код, который я написал.

import matplotlib
import matplotlib.pyplot as plt
import datetime


y = [2, 4, 12, 8, 9, 13, 14, 14, 18, 20]
x = [datetime.datetime.now() + datetime.timedelta(hours=i) for i in range(len(y))]


plt.plot(x, y)
plt.gcf().autofmt_xdate()
plt.show()

0 ответов

Другие вопросы по тегам