Временная шкала с использованием matplotlib & PolyCollection - Python - PullRequest
0 голосов
/ 04 апреля 2020

Я пытался скопировать ответ @theimportanceofbeingernest на Гистограмму шкалы времени, используя python и matplotlib , и не могу получить правильный выходной график.

Вот мой текущий вывод

Вот мой желаемый вывод (но с использованием моих данных et c.)

Я изо всех сил пытаюсь определить проблема. Любая помощь будет оценена! Спасибо.

Вот код:

import datetime as dt
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from matplotlib.collections import PolyCollection

data = [(dt.datetime(1900, 1, 1, 14, 19, 26), dt.datetime(1900, 1, 1, 14, 19, 29), 'index'),
        (dt.datetime(1900, 1, 1, 14, 19, 29), dt.datetime(1900, 1, 1, 14, 19, 31), 'links'),
        (dt.datetime(1900, 1, 1, 14, 19, 31), dt.datetime(1900, 1, 1, 14, 19, 33), 'guides'),
        (dt.datetime(1900, 1, 1, 14, 19, 33), dt.datetime(1900, 1, 1, 14, 19, 35), 'prices'),
        (dt.datetime(1900, 1, 1, 14, 19, 35), dt.datetime(1900, 1, 1, 16, 39, 47), 'index'),
        (dt.datetime(1900, 1, 1, 16, 39, 47), dt.datetime(1900, 1, 1, 16, 39, 48), 'prices')]

cats = {'index': 1, 'links': 2, 'guides': 3, 'prices': 4}
colormapping  = {'index': 'C0', 'links': 'C1', 'guides': 'C2', 'prices': 'C3'} 

verts = []
colors = []
for d in data:
    v =  [(mdates.date2num(d[0]), cats[d[2]]-.4),
          (mdates.date2num(d[0]), cats[d[2]]+.4),
          (mdates.date2num(d[1]), cats[d[2]]+.4),
          (mdates.date2num(d[1]), cats[d[2]]-.4),
          (mdates.date2num(d[0]), cats[d[2]]-.4)]
    verts.append(v)
    colors.append(colormapping[d[2]])

bars = PolyCollection(verts, facecolors=colors)

fig, ax = plt.subplots()
ax.add_collection(bars)
ax.autoscale()
loc = mdates.MinuteLocator(byminute=[0,30])
ax.xaxis.set_major_locator(loc)
ax.xaxis.set_major_formatter(mdates.AutoDateFormatter(loc))

ax.set_yticks([1,2,3,4])
ax.set_yticklabels(['index', 'links', 'guides', 'prices'])
plt.show()

1 Ответ

0 голосов
/ 04 апреля 2020

Ваша разница во времени очень мала. Они составляют несколько секунд, в то время как ваш диапазон x составляет несколько часов. Таким образом, эти столбцы в основном становятся невидимыми.

Обратите внимание, что в областях matplotlib обычно рисуются без сглаживания, что полезно при объединении нескольких полупрозрачных областей. Линии, однако, нарисованы с некоторой толщиной (в пространстве экрана) и сглажены. Следовательно, установка явного цвета кромки помогает визуализировать эти «полосы».

bars = PolyCollection(verts, facecolors=colors, edgecolors=colors)

resulting plot

...