使用 Python 生成甘特图(Gantt Chart)

本文最后更新于:2024年8月12日 下午

在写操作系统的作业的时候有几道题给出了几个进程的相关信息,要求我们画出几种简单调度的甘特图。操作系统的作业一直是电子版,上传 pdf 即可的。我觉得手画甘特图拍照嵌入 pdf 中不太优雅,过于掉价,因此就想直接生成甘特图嵌入。

在谷歌搜寻了一番,我发现现在的甘特图生成网站都太现代化了,根本不是操作系统课上教的样子了。

现代化的甘特图

所幸我找到了 gao-keyong/matplotlib-gantt,虽然只有两个 star(没事,加上我就 3 stars 了),但确实能用,README 中的样例也是我期望的样子。

项目中自带了一个 jupyter 的示例,算得上是非常简单易上手的了,依赖方面只要装好 matplotlib 就可以使用,不存在依赖地狱。尽管是三年前的项目,在我本机的 Python 3.11 上仍然能够正常运行。

tuple 中的第一个数字表示从当前时间开始,第二个数字表示持续时间。每一个表示 category 的 list 中可以存在多个 tuple。

给一些咱生成的例子。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
from gantt import *
category_names = ['P1', 'P2', 'P3', 'P4', 'P5']

results = {
'FCFS': [[(0,2)], [(2,1)], [(3,8)], [(11,4)], [(15,5)]],
'SJF': [[(1,2)], [(0,1)], [(12,8)], [(3,4)], [(7,5)]],
'non-compreemptive priority': [[(13,2)],[(19,1)],[(0,8)],[(15,4)],[(8,5)]],
'RR (quantum=2)': [[(0,2)], [(2,1)],[(3,2),(9,2),(15,2),(18,2)], [(5,2),(11,2)], [(7,2),(13,2),(17,1)]]
}

arrival_t = [0, 0, 0, 0]

gantt(category_names, results, arrival_t).show()


1
2
3
4
5
6
7
8
9
10
11
from gantt import *
category_names = ['P1', 'P2', 'P3', 'P4', 'P5', 'P6']

results = {
'': [[(0,20)], [(25,10),(45,10),(75,5)], [(35,10),(55,5),(80,10)], [(60,15)], [(100,5),(115,5)],[(105,10)]],
}

arrival_t = [0]

gantt(category_names, results, arrival_t).show()


使用 Python 生成甘特图(Gantt Chart)
https://zhul.in/2024/04/24/generate-gantt-chart-with-python/
作者
竹林里有冰
发布于
2024年4月24日
更新于
2024年8月12日
许可协议