【1000个文本绘图技巧-Graphviz003】如何用Graphviz将一年按照月份对齐显示?

背景

通过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模式能够清晰的表达以及记录。
还能用它表达一些事情的关键节点,一目了然。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值