甘特图是一种项目管理工具,用于展示项目进度、任务依赖和时间安排。本文将介绍如何使用Python的matplotlib和plotly库来创建甘特图,并有效展示项目时间线和任务依赖关系。
甘特图是一种以亨利·甘特(Henry L. Gantt)命名的图表,它通过水平条形图来表示各个任务或事件,以及它们的开始和结束日期,从而为项目的成功提供了一条清晰的路线图。通过甘特图,可以发现任务之间的关系,识别依赖关系,并创建一个符合项目进度的实际时间表。
matplotlib库是Python中一个强大的绘图工具,可以用来创建甘特图。以下是使用matplotlib创建甘特图的步骤和代码示例。
import matplotlib.pyplot as plt
import pandas as pd
import matplotlib.dates as mdates
# 定义数据
df = pd.DataFrame([
dict(Task="任务A", Start='2009-01-01', Finish='2009-02-28'),
dict(Task="任务B", Start='2009-03-05', Finish='2009-04-15'),
dict(Task="任务C", Start='2009-02-20', Finish='2009-05-30')
])
# 将开始和结束日期转换为datetime
df['Start'] = pd.to_datetime(df['Start'])
df['Finish'] = pd.to_datetime(df['Finish'])
# 计算持续时间
df['Duration'] = df['Finish'] - df['Start']
# 创建图形和轴
fig, ax = plt.subplots()
# 为每个任务创建条形图
for i, row in df.iterrows():
ax.barh(row['Task'], row['Duration'].days, left=row['Start'])
# 将x轴格式化为日期
ax.xaxis_date()
ax.xaxis.set_major_locator(mdates.MonthLocator())
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d'))
# 设置标签
ax.set_xlabel('日期')
ax.set_ylabel('任务')
ax.set_title('甘特图')
# 反转y轴,以便任务从上到下列出
ax.invert_yaxis()
# 旋转日期标签以提高可读性
plt.xticks(rotation=45)
# 显示图表
plt.tight_layout()
plt.show()
在上述代码中,matplotlib的`subplots`函数用于创建一个图形和一个轴。循环遍历DataFrame的每一行,为每个任务创建一个水平条形图(h-bar),使用matplotlib的`barh`函数。每个条形图的高度设置为任务的持续时间,每个条形图的左边缘设置为任务的开始日期。
plotly库是另一个Python绘图库,它提供了创建甘特图的更简单语法和时间框架的定制。以下是使用plotly创建甘特图的步骤和代码示例。
import plotly.figure_factory as ff
df = [
dict(Task="任务A", Start='2009-01-01', Finish='2009-02-28'),
dict(Task="任务B", Start='2009-03-05', Finish='2009-04-15'),
dict(Task="任务C", Start='2009-02-20', Finish='2009-05-30')
]
fig = ff.create_gantt(df)
fig.show()