Python 如何使用全息视图可视化时间跨度?
我最近在python中发现了一个很有前途的可视化库,作为实践,我想转移一些现有代码,看看它在hv中是什么样子。我达到了我无法重现的给定情节 我想可视化一个时间线或路线图,其中x轴是pd.datetime类型,y轴是分类的。大概是这样的:Python 如何使用全息视图可视化时间跨度?,python,holoviews,pyviz,Python,Holoviews,Pyviz,我最近在python中发现了一个很有前途的可视化库,作为实践,我想转移一些现有代码,看看它在hv中是什么样子。我达到了我无法重现的给定情节 我想可视化一个时间线或路线图,其中x轴是pd.datetime类型,y轴是分类的。大概是这样的: 我应该使用什么元素?如何定义各部分的开始和结束位置?听起来您需要一个甘特图。 我正在使用从时间起点到时间终点绘制一条线: # import libraries from datetime import datetime import holoviews as h
我应该使用什么元素?如何定义各部分的开始和结束位置?听起来您需要一个甘特图。 我正在使用从时间起点到时间终点绘制一条线:
# import libraries
from datetime import datetime
import holoviews as hv
hv.extension('bokeh')
# drawing a simple line
line1 = hv.Curve([
[datetime(2018, 1, 3), 'Event1'],
[datetime(2018, 1, 31), 'Event1'],
])
# creating a dashed line
line2 = hv.Curve([
[datetime(2018, 3, 3), 'Event2'],
[datetime(2018, 3, 30), 'Event2'],
]).opts(line_dash='dashed')
# creating a black thicker line
line3 = 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 overlay
gantt_chart = (line1 * line2 * line3)
# change xlim and width of the whole chart and add xlabel
# just making the plot a bit nicer
gantt_chart.opts(
width=800,
xlim=(datetime(2018, 1, 1), datetime(2018, 12, 31)),
xlabel='start to stop',
ylabel='',
)
如您所见,我还添加了一些选项作为示例来更改线条样式和x轴范围
示例代码给出了以下图表:
另一种解决方案是一种更通用的生成甘特图的方法,它在数据上循环并为每个开始/停止点生成曲线:
# import libraries
from datetime import datetime
import holoviews as hv
hv.extension('bokeh')
# create sample data
data = [
[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 point
all_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 plot
gantt_chart = hv.Overlay(all_lines_list)
# make plot nicer
gantt_chart.opts(
show_legend=False,
width=800,
xlim=(datetime(2018, 1, 1), datetime(2018, 12, 31)),
xlabel='start to stop',
ylabel='',
)
听起来你需要一个甘特图。 我正在使用从时间起点到时间终点绘制一条线:
# import libraries
from datetime import datetime
import holoviews as hv
hv.extension('bokeh')
# drawing a simple line
line1 = hv.Curve([
[datetime(2018, 1, 3), 'Event1'],
[datetime(2018, 1, 31), 'Event1'],
])
# creating a dashed line
line2 = hv.Curve([
[datetime(2018, 3, 3), 'Event2'],
[datetime(2018, 3, 30), 'Event2'],
]).opts(line_dash='dashed')
# creating a black thicker line
line3 = 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 overlay
gantt_chart = (line1 * line2 * line3)
# change xlim and width of the whole chart and add xlabel
# just making the plot a bit nicer
gantt_chart.opts(
width=800,
xlim=(datetime(2018, 1, 1), datetime(2018, 12, 31)),
xlabel='start to stop',
ylabel='',
)
如您所见,我还添加了一些选项作为示例来更改线条样式和x轴范围
示例代码给出了以下图表:
另一种解决方案是一种更通用的生成甘特图的方法,它在数据上循环并为每个开始/停止点生成曲线:
# import libraries
from datetime import datetime
import holoviews as hv
hv.extension('bokeh')
# create sample data
data = [
[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 point
all_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 plot
gantt_chart = hv.Overlay(all_lines_list)
# make plot nicer
gantt_chart.opts(
show_legend=False,
width=800,
xlim=(datetime(2018, 1, 1), datetime(2018, 12, 31)),
xlabel='start to stop',
ylabel='',
)
HoloViews>=1.13现在有了。
这使得创建甘特图变得更加容易:
从日期时间导入日期时间
将全息视图导入为hv
高压分机“bokeh”
数据={
“开始”:[datetime2018,1,3,datetime2018,3,3,datetime2018,7,15],
“结束”:[datetime2018,1,31,datetime2018,3,30,datetime2018,9,23],
'开始事件':['Event1','Event2','Event2'],
“结束事件”:[“事件1”、“事件2”、“事件2]”,
}
df=pd.DataFramedata
高压段
数据=df,
kdims=[“开始”、“开始事件”、“结束”、“结束事件”]
.optsline_宽度=4,宽度=1000
HoloViews>=1.13现在有了。
这使得创建甘特图变得更加容易:
从日期时间导入日期时间
将全息视图导入为hv
高压分机“bokeh”
数据={
“开始”:[datetime2018,1,3,datetime2018,3,3,datetime2018,7,15],
“结束”:[datetime2018,1,31,datetime2018,3,30,datetime2018,9,23],
'开始事件':['Event1','Event2','Event2'],
“结束事件”:[“事件1”、“事件2”、“事件2]”,
}
df=pd.DataFramedata
高压段
数据=df,
kdims=[“开始”、“开始事件”、“结束”、“结束事件”]
.optsline_宽度=4,宽度=1000
plotly后端支持它吗?它似乎不支持,似乎只适用于Bokeh后端。您可以通过执行以下操作来测试:hv.extension'plotly'与hv.extension'bokeh'谢谢。我试着使用了来自的cantor函数。情节确实显示了,非共享选项下降了一半,但在我的计算机上,plotly后端30秒对4秒的速度要慢得多,至少在VSCode中是这样,但我是用Dash构建的。有点想留下来。plotly后端支持它吗?它似乎不支持,似乎只适用于Bokeh后端。您可以通过执行以下操作来测试:hv.extension'plotly'与hv.extension'bokeh'谢谢。我试着使用了来自的cantor函数。情节确实显示了,非共享选项下降了一半,但在我的计算机上,plotly后端30秒对4秒的速度要慢得多,至少在VSCode中是这样,但我是用Dash构建的。有点想留下来。