四季花海
HoloViews >= 1.13 现在有hv.Segments()。这使得创建甘特图变得更加容易:from datetime import datetimeimport holoviews as hvhv.extension('bokeh')data = { 'start': [datetime(2018, 1, 3), datetime(2018, 3, 3), datetime(2018, 7, 15)], 'end': [datetime(2018, 1, 31), datetime(2018, 3, 30), datetime(2018, 9, 23)], 'start_event': ['Event1', 'Event2', 'Event2'], 'end_event': ['Event1', 'Event2', 'Event2'], }df = pd.DataFrame(data)hv.Segments( data=df, kdims=['start', 'start_event', 'end', 'end_event']).opts(line_width=4., width=1000)
梦里花落0921
这听起来像你需要一个甘特图。我正在使用hv.Curve()从时间起点到终点画一条线:# import librariesfrom datetime import datetimeimport holoviews as hvhv.extension('bokeh')# drawing a simple lineline1 = hv.Curve([ [datetime(2018, 1, 3), 'Event1'], [datetime(2018, 1, 31), 'Event1'],])# creating a dashed lineline2 = hv.Curve([ [datetime(2018, 3, 3), 'Event2'], [datetime(2018, 3, 30), 'Event2'],]).opts(line_dash='dashed')# creating a black thicker lineline3 = hv.Curve([ [datetime(2018, 7, 15), 'Event2'], [datetime(2018, 9, 23), 'Event2'],]).opts(color='black', line_width=10.0)# add all 3 lines together on 1 plot with the * symbol# this creates an overlaygantt_chart = (line1 * line2 * line3)# change xlim and width of the whole chart and add xlabel# just making the plot a bit nicergantt_chart.opts( width=800, xlim=(datetime(2018, 1, 1), datetime(2018, 12, 31)), xlabel='start to stop', ylabel='',)如您所见,我还添加了一些选项作为示例来更改线条的样式并更改 x 轴的范围。示例代码为您提供了此图:另一种解决方案是生成此甘特图的更通用方法,它循环数据并为每个开始/停止点生成曲线:# import librariesfrom datetime import datetimeimport holoviews as hvhv.extension('bokeh')# create sample datadata = [ [datetime(2018, 1, 3), datetime(2018, 1, 31), 'Event1'], [datetime(2018, 3, 3), datetime(2018, 3, 30), 'Event2'], [datetime(2018, 7, 15), datetime(2018, 9, 23), 'Event2'],]# loop over data to create a list with a line/curve for every start/stop pointall_lines_list = [ hv.Curve([ [row[0], row[2]], [row[1], row[2]], ]).opts(color='red') for row in data]# put all lines in an Overlay plot that can display all lines on 1 plotgantt_chart = hv.Overlay(all_lines_list)# make plot nicergantt_chart.opts( show_legend=False, width=800, xlim=(datetime(2018, 1, 1), datetime(2018, 12, 31)), xlabel='start to stop', ylabel='',)