背景
通过Graphviz来表达timeline比较形象,如果一年365天都按照竖向太长,按照每个月比较形象,如何做到?
python生成Graphviz的年表
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
msi=int(sys.argv[1])
dsi=int(sys.argv[2])
mei=int(sys.argv[3])
dei=int(sys.argv[4])
year="23"
mdays=[31,28,31, 30,31,30, 31,31,30, 31,30,31]
def gen_mon(msi,mei,dsi,dei):
print("\nnode [fontsize=20, shape=box, style=filled fillcolor=lightgreen];")
for m in range(msi, mei+1):
if m == msi:
ds=int(dsi)
else:
ds=1
if m==mei:
de=dei
if de > mdays[m-1]:
de = mdays[m-1]
else:
de=mdays[m-1]
print("\n{:>02}.{:>02}".format(year,m))
def gen_day(msi,mei,dsi,dei):
print("\nnode [fontsize=20, shape=box, style=filled fillcolor=lightgray];")
for m in range(msi, mei+1):
if m == msi:
ds=int(dsi)
else:
ds=1
if m==mei:
de=dei
if de > mdays[m-1]:
de = mdays[m-1]
else:
de=mdays[m-1]
print("\n{:>02}.{:>02}->".format(year,m))
for i in range(ds, de+1):
if i!=de:
print("{:>02}{:>02}->".format(m,i))
else:
print("{:>02}{:>02}".format(m,i))
def gen_rank_same(msi,mei,dsi,dei):
print("# rank")
print("\nnode [fontsize=20, shape=box, style=filled fillcolor=cyan];")
for m in range(msi, mei+1):
if m == msi:
ds=int(dsi)
else:
ds=1
if m==mei:
de=dei
if de > mdays[m-1]:
de = mdays[m-1]
else:
de=mdays[m-1]
print("\n#{:>02}.{:>02}".format(year,m))
septimelist=[3,6,9,12]
seasonlist=[3,6,9,12]
for i in range(ds, de+1):
if (m in seasonlist) and (i == 30):
print("{ rank=same; %02d%02d -> season_%02d%02d}" %(m,i, m,i))
elif (m in septimelist) and (i==22):
print("{ rank=same; %02d%02d -> jieqi_zhifen%02d%02d}" %(m,i, m,i))
else:
print("{ rank=same; %02d%02d }" %(m,i))
def gen_head():
print("digraph timeline {")
print('size = "7,8";')
def gen_tail():
print("}")
def gen_total():
gen_head()
gen_mon(msi, mei, dsi, dei)
gen_day(msi, mei, dsi, dei)
gen_rank_same(msi, mei, dsi, dei)
gen_tail()
def main():
gen_total()
main()
执行命令:
python m.py 1 1 12 31 > 1.gv
参数说明:
m.py [startm] [startmday] [endm] [endmday]
效果

综述
使用Graphviz的->默认竖向结构以及->连成串形成多级。
然后另起一行又从第一行开始串,组合成了特殊效果。
暂且定义为yearline模式,使用YL模式能够清晰的表达以及记录。
还能用它表达一些事情的关键节点,一目了然。
本文介绍了如何使用Python和Graphviz生成具有月度和月份内日期层次的年表,展示了如何通过YL模式创建清晰的时间线表示法,可用于事件关键节点标记。
1149

被折叠的 条评论
为什么被折叠?



