我有以下类型的数据:
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
函数,但我想知道python中是否已经有一个现成的模块可以很好地与matplotlib和pandas集成?
答案 0 :(得分:9)
我认为这里不需要特殊功能。使用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)
答案 1 :(得分:0)
如下所示对输入数据进行了不同的连续处理,对输入数据更加自然:
events = [('Event 0', 2003, 2007),
('Event 1', 1991, 2016),
('Event 2', 2008, 2016)
#...
]
还包含在一个函数中,正如问题作者可能想要的那样。
见https://github.com/epogrebnyak/hrange/blob/master/hrange.py