python - Python中的时间线
问题描述
有没有什么方法可以在 Python 中创建类似于这篇文章的时间线,只使用 1 个 vizualiation 包而没有其他设置?我曾尝试使用该plotnine
包在 Python 中使用 ggplot2 ,但这让它工作起来非常麻烦。此外,我已经尝试过该labella
软件包,但这需要安装 Latex 发行版。由于matplotlib
我找不到在事件栏旁边包含评论的方法。
解决方案
我也有这个问题......这是我的解决方案。请忽略丑陋的颜色生成……这更多的是一项正在进行的工作。
它是 Python 3.6 测试的......
import numpy as np
import matplotlib.pylab as plt
import pandas as pd
from cycler import cycler
from datetime import datetime, timedelta
idx = pd.date_range('2018-1-1', '2018-9-10', freq='1D')
df = pd.DataFrame({'Offset': 20,'val': 2}, index=idx)
df['Offset']=[n for n in range(0,len(df))]
sched=[{'name':'tim',
'jobs':{
1:(datetime(2018,1,1,),datetime(2018,2,1)),
2:(datetime(2018,4,1) ,datetime(2018,5,1)),
3:(datetime(2018,6,1) ,datetime(2018,7,1))}
},
{'name':'BiMonthly',
'jobs':{
1:(datetime(2018,2,1,),datetime(2018,3,1)),
2:(datetime(2018,5,1) ,datetime(2018,6,1)),
3:(datetime(2018,7,1) ,datetime(2018,8,1))}
}
,
{'name':'Monthly',
'jobs':{
1:(datetime(2018,2,1),datetime(2018,2,10)),
2:(datetime(2018,3,1),datetime(2018,3,10)),
3:(datetime(2018,4,1),datetime(2018,4,10)),
4:(datetime(2018,5,1),datetime(2018,5,10)),
5:(datetime(2018,6,1),datetime(2018,6,10))
}},
{'name':'LongTerm',
'jobs':{
1:(datetime(2018,2,1),datetime(2018,5,1))
}
}]
color_cycle = cycler(c=['r', 'g', 'b'])
ls_cycle = cycler('ls', ['-', '--'])
sty_cycle = ls_cycle * ( color_cycle)
def get_offset(when):
global df
if type(when)==str:
when=pd.to_datetime(when)
try:
return df.loc[when]['Offset']
except KeyError:
print("{} Not Found".format(when))
return -1
thickness=0.3
timelines=[]
start_period = idx[0].to_period('D').ordinal
for a_job_group in sched:
timeline=[]
print("-----")
for keys in a_job_group['jobs']:
#print("Dates {} {}".format(a_job_group['jobs'][keys][0],
# a_job_group['jobs'][keys][1]))
offset_start = get_offset(a_job_group['jobs'][keys][0])
offset_end = get_offset(a_job_group['jobs'][keys][1])
print("offset {} {} TimeSpan {}".format(offset_start,
offset_end, offset_end - offset_start))
timeline_data=(start_period + offset_start,offset_end-offset_start)
timeline.append(timeline_data)
timelines.append(timeline)
pos= 0
df.drop(['Offset'],axis=1,inplace=True,)
ax = df.plot(color='w')
col_schema=[s for s in sty_cycle]
for t in timelines:
ax.broken_barh(t, [pos, thickness],
color=col_schema[pos]['c'],
linestyle=col_schema[pos]['ls'])
pos+= 1
plt.show()
它输出什么?
我必须添加一个索引 - 并检查我是否可以更改 TimeSteps(小时数周等),但到目前为止,这是我能找到的最佳解决方案。
我计划将mpld3添加到它 - 然后通过 Flask 运行它......所以我还有一些路要走。
推荐阅读
- recursion - 使用递归了解河内塔的机制
- macos - 如何在 macOS 上使用 OpenMPI、Hypre 和 Mumps 编译 Elmer fem
- r - 在闪亮的应用程序中选择多个数据框行范围
- xcode - 阻止 Xcode 在 SIGABRT 上切换到应用程序委托
- unity3d - 使用 Input.Gyro 从原点旋转中获取“倾斜”量
- jquery - 单个产品的照片库/幻灯片放映是什么词
- r - R ggplot2 如何通过 aes 获取列名?
- elasticsearch - 从弹性搜索中删除重复项
- sql - 从列中计算值
- javascript - 如何将活动范围更改为可以通过 setValues 设置的数组