使用matplotlib和PolyCollection的时间轴栏-Python

问题描述 投票:0回答:1

我一直在尝试将@theimportanceofbeingernest的答案复制到Timeline bar graph using python and matplotlib并且似乎无法获得正确的输出图。

Here is my current output

[Here is my desired output(但使用我的数据等)]

我正在努力找出问题所在。任何帮助将不胜感激!谢谢。

这里是代码:

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()
python matplotlib visualization timeline
1个回答
0
投票

您的时间差非常短。它们是几秒钟,而您的x范围是几小时。因此,这些条基本上是不可见的。

请注意,在matplotlib中,通常绘制区域时没有抗锯齿,这在将多个半透明区域组合在一起时很有用。但是,会以一定的粗细(在屏幕空间中)绘制线条并进行抗锯齿。因此,设置显式的边缘颜色有助于可视化“条”。

bars = PolyCollection(verts, facecolors=colors, edgecolors=colors)
© www.soinside.com 2019 - 2024. All rights reserved.