matplotlib 如何绘制条形时间轴

h5qlskok  于 2023-06-23  发布在  其他
关注(0)|答案(2)|浏览(139)

我有以下数据类型:

Begin   End                        Event
 2003  2007                      Event 1
 1991  2016                      Event 2
 2008  2016                      Event 3
 1986  2015                      Event 4
 2013  2013                      Event 5
 1994  1999                      Event 6
 2002  2002                      Event 7

我的目标是为这些事件做一个时间轴,即。从日期1到日期2画出一系列不同的直条和水平条,并在上面标上事件的名称。
我目前正在matplotlib的barh函数上试试运气。

monwx1rj

monwx1rj1#

我不认为这里需要特殊的功能。使用plt.barh可以直接给出所需的图。

import matplotlib.pyplot as plt
import numpy as np

begin = np.array([2003,1991,2008,1986,2013,1994,2002])
end =   np.array([2007,2016,2016,2015,2013,1999,2002])
event = ["Event {}".format(i) for i in range(len(begin))]

plt.barh(range(len(begin)),  end-begin, left=begin)

plt.yticks(range(len(begin)), event)
plt.show()

请注意,事件4和6似乎缺失,因为开始和结束是相同的。如果你想把end解释为一年的结束,你可以加1,

plt.barh(range(len(begin)),  end-begin+1, left=begin)

vdgimpew

vdgimpew2#

对输入数据进行了不同的序列化,如下所示,对于传入数据来说更自然一点:

events = [('Event 0', 2003, 2007),
  ('Event 1', 1991, 2016),
  ('Event 2', 2008, 2016)
  #...
]

也 Package 在一个函数中,正如作者所希望的那样。
参见https://github.com/epogrebnyak/hrange/blob/master/hrange.py

相关问题