0

我正在尝试实时监控传感器数据,但该图没有显示任何内容,下面只是一个示例。谁能向我解释为什么结果什么也没显示?

在此处输入图像描述

import datetime
import random
import matplotlib.pyplot as plt
from drawnow import *
from matplotlib.dates import AutoDateLocator, AutoDateFormatter, date2num

i = 0
x = 0
y = 0
FirstTime = str('00:00')
LastTime = str('00:00')

def CreatePlot():
    figure = plt.subplot()
    plt.plot([],[])
    date_datetime = datetime.datetime.strptime(LastTime, '%H:%M')
    int_date = date2num( date_datetime)
    locator = AutoDateLocator()
    figure.xaxis.set_major_locator(locator)
    figure.xaxis.set_major_formatter( AutoDateFormatter(locator) )
    min_date = date2num( datetime.datetime.strptime(FirstTime, '%H:%M') )
    max_date = date2num( datetime.datetime.strptime(LastTime, '%H:%M') )
    plt.xlim(min_date, max_date)
    plt.plot(x,y, 'r-')
    plt.gcf().autofmt_xdate()

while True:
    x = datetime.datetime.now() + datetime.timedelta(minutes=i)
    x = datetime.datetime.strftime(x,'%H:%M')
    if i == 0:
        FirstTime = x
    else:
        LastTime = x
    y = (2*i)+2
    if i>500:
        break
    else:
        drawnow(CreatePlot)
        plt.pause(0.0001)
        i+=1
4

1 回答 1

0

我解决了这个问题,所以我将解释它以帮助像我这样的其他人,第一个问题是使用 strftime 将日期格式更改为字符串,在 x 轴上绘制字符串不是自动格式化的,以下命令也是多余的:

min_date = date2num( datetime.datetime.strptime(FirstTime, '%H:%M') )
max_date = date2num( datetime.datetime.strptime(LastTime, '%H:%M') )
plt.xlim(min_date, max_date)

此外,为了更好地查看,也可以添加以下命令:

from matplotlib.ticker import AutoMinorLocator
from matplotlib.dates import AutoDateLocator, AutoDateFormatter
.
.
.
.
ax0 = plt.subplot(2,2,1)
locator = AutoDateLocator()
ax0.xaxis.set_major_locator(locator)
formatter = AutoDateFormatter(locator)
ax0.xaxis.set_major_formatter(formatter)
ax0.xaxis.set_minor_locator(AutoMinorLocator())
于 2021-03-03T05:34:44.023 回答