Нарисуйте прямоугольник времени (yAxis) от начала до конца события - PullRequest
0 голосов
/ 31 января 2019

Во-первых, новичок в matplotlib и никогда не пытался рисовать прямоугольник.Мой yAxis покажет время (24-часовой период) с xAxis, показывающим каждое событие.Мне нужно показать, когда вовремя началось событие (ЧЧ: ММ) и когда оно завершилось (ЧЧ: ММ).Я видел несколько горизонтальных прямоугольников и несколько графиков свечей (не уверен, что это будет работать для меня).Каждый прямоугольник xAxis не связан с другим.Я могу сгенерировать холст и создать прошедшее время, вычтя время окончания из начального времени, чтобы сгенерировать точки на прямоугольнике, но я не могу получить объект для отображения на графике.Идеи?Код ниже:

from datetime import datetime, timedelta
import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle
import matplotlib.dates as mdates
from matplotlib.dates import HourLocator
from matplotlib.dates import DateFormatter

fig, ax = plt.subplots()


data = ["20180101T09:28:52.442130", "20180101T09:32:04.672891"]

endTime = datetime.strptime(data[1], "%Y%m%dT%H:%M:%S.%f")
beginTime = datetime.strptime(data[0], "%Y%m%dT%H:%M:%S.%f")

timeDiff = endTime - beginTime
elapseTime = timedelta(days=0, seconds=timeDiff.seconds,\
microseconds=timeDiff.microseconds)
print("elapseTime:", elapseTime)
theStartTime = endTime
theEndTime = theStartTime + elapseTime

# convert to matplotlib date representation
eventStart = mdates.date2num(theStartTime)
eventEnd = mdates.date2num(theEndTime)
eventTime = eventEnd - eventStart

# plot it as a Rectangle
nextEvent = Rectangle((1, eventStart), 1, eventTime, color="blue")
print("nextEvent:", nextEvent)

# locator = mdates.AutoDateLocator()
# locator.intervald[“MINUTELY”] = [0, 5, 10, 15, 20, 25, 30, 35, 40, 45,\   
#  50, 55]
# formatter = mdates.AutoDateFormatter[locator]
# formatter.scale[1/(24.*60.)] = “%M:%S”

timeFormat = mdates.DateFormatter("%H:%M")
ax.set_xlim([1, 5])
ax.yaxis_date()
ax.yaxis.set_major_formatter(timeFormat)
ax.set_ylim([datetime.strptime("23:59:59", "%H:%M:%S"),\ 
   datetime.strptime("00:00:00", "%H:%M:%S")])
ax.set_ylabel("Time(HH:MM)")
ax.set_xlabel("Events")
ax.add_patch(nextEvent)

plt.show()

enter image description here

Я не могу увидеть данные, но они отображаются на основе печати объекта прямоугольника, который не соответствует холсту.

То, чего я пытаюсь достичь, это изображение ниже (представление подсвечника) enter image description here

Ответы [ 2 ]

0 голосов
/ 31 января 2019

ДА, это была проблема.Что-то, что я упустил из виду при установке границ холста.

0 голосов
/ 31 января 2019

Действительно, ваша ось даты и времени полностью отключена.Он варьируется от полуночи первого января 1900 года до одной минуты до полуночи второго января 1900 года. И все же ваш прямоугольник где-то в 2018 году.

Таким образом, решение простое, включая полное дата время при установке пределов.

ax.set_ylim([datetime.strptime("20180101 23:59:59", "%Y%m%d %H:%M:%S"), 
             datetime.strptime("20180101 00:00:00", "%Y%m%d %H:%M:%S")])

В качестве альтернативы укажите ваши данные, которые имели место в 1900 году.

...