博客
关于我
python制作甘特图的基本知识(附Demo)
阅读量:797 次
发布时间:2023-03-07

本文共 3481 字,大约阅读时间需要 11 分钟。

甘特图是一种常见的项目管理工具,用于直观地展示项目任务的时间分布和进度。在项目管理中,甘特图通过将任务按时间轴排列,便于团队成员了解各个任务的时间安排和完成情况。常用的绘制工具包括matplotlib和plotly,这两种工具各有特点,适用于不同的需求。

matplotlib是一种功能强大的绘图库,尤其适合制作静态的甘特图。以下是使用matplotlib绘制甘特图的示例代码:

import matplotlib.pyplot as plt
import pandas as pd
import matplotlib.dates as mdates
tasks = [
{"Task": "Task A", "Start": "2024-01-01", "End": "2024-01-05"},
{"Task": "Task B", "Start": "2024-01-02", "End": "2024-01-07"},
{"Task": "Task C", "Start": "2024-01-08", "End": "2024-01-10"},
]
df = pd.DataFrame(tasks)
df["Start"] = pd.to_datetime(df["Start"])
df["End"] = pd.to_datetime(df["End"])
fig, ax = plt.subplots(figsize=(10, 6))
for index, row in df.iterrows():
ax.barh(row["Task"], (row["End"] - row["Start"]).days, left=row["Start"], color="skyblue")
ax.xaxis.set_major_locator(mdates.DayLocator(interval=1))
ax.xaxis.set_major_formatter(mdates.DateFormatter("%Y-%m-%d"))
plt.title("Gantt Chart")
plt.xlabel("Date")
plt.ylabel("Tasks")
plt.show()

如上代码所示,matplotlib通过barh函数绘制水平条形图,StartEnd字段用于确定任务的时间范围。日期轴通过DateLocatorDateFormatter设置为每天一个刻度,确保时间轴清晰易读。

如果需要更复杂的甘特图,例如带有不同的颜色来区分任务,可以在tasks数据结构中添加Color字段:

tasks = [
{
"Task": "Task A",
"Start": "2024-01-01",
"End": "2024-01-05",
"Color": "skyblue"
},
{
"Task": "Task B",
"Start": "2024-01-02",
"End": "2024-01-07",
"Color": "lightgreen"
},
{
"Task": "Task C",
"Start": "2024-01-08",
"End": "2024-01-10",
"Color": "lightcoral"
}
]

修改后的代码如下:

import matplotlib.pyplot as plt
import pandas as pd
import matplotlib.dates as mdates
tasks = [
{
"Task": "Task A",
"Start": "2024-01-01",
"End": "2024-01-05",
"Color": "skyblue"
},
{
"Task": "Task B",
"Start": "2024-01-02",
"End": "2024-01-07",
"Color": "lightgreen"
},
{
"Task": "Task C",
"Start": "2024-01-08",
"End": "2024-01-10",
"Color": "lightcoral"
}
]
df = pd.DataFrame(tasks)
df["Start"] = pd.to_datetime(df["Start"])
df["End"] = pd.to_datetime(df["End"])
fig, ax = plt.subplots(figsize=(10, 6))
for index, row in df.iterrows():
ax.barh(row["Task"], (row["End"] - row["Start"]).days, left=row["Start"], color=row["Color"])
ax.xaxis.set_major_locator(mdates.DayLocator(interval=1))
ax.xaxis.set_major_formatter(mdates.DateFormatter("%Y-%m-%d"))
plt.title("Gantt Chart with Different Colors")
plt.xlabel("Date")
plt.ylabel("Tasks")
plt.show()

如果你想使用交互式的甘特图工具,plotly是一个更好的选择。plotly可以生成动态的交互式图表,适合在线展示。

以下是使用plotly绘制甘特图的示例代码:

import plotly.express as px
import pandas as pd
tasks = [
{
"Task": "Task A1",
"Start": "2024-01-01",
"Finish": "2024-01-05",
"Group": "Group A"
},
{
"Task": "Task A2",
"Start": "2024-01-06",
"Finish": "2024-01-10",
"Group": "Group A"
},
{
"Task": "Task B1",
"Start": "2024-01-02",
"Finish": "2024-01-07",
"Group": "Group B"
},
{
"Task": "Task B2",
"Start": "2024-01-08",
"Finish": "2024-01-12",
"Group": "Group B"
}
]
df = pd.DataFrame(tasks)
fig = px.timeline(df, x_start="Start", x_end="Finish", y="Task", color="Group", title="Gantt Chart with Groups")
fig.update_yaxes(categoryorder="total ascending")
fig.show()

如上代码所示,plotly通过px.timeline函数绘制交互式甘特图,color参数用于指定不同的组别颜色,categoryorder参数用于设置y轴的分类顺序。

通过以上代码示例,可以轻松创建出美观且功能完善的甘特图,满足不同项目管理需求。

转载地址:http://ehofk.baihongyu.com/

你可能感兴趣的文章
python基础篇(5):None类型
查看>>
python基础篇(4):range语句
查看>>
python基础篇(3):print()补偿知识点
查看>>
python基础篇(2):字符串扩展知识点
查看>>
python基础篇(1):type()
查看>>
python基础篇(15):闭包
查看>>
python基础篇(14):多态
查看>>
python基础篇(13):类型注解
查看>>
python基础篇(12):继承
查看>>
python基础篇(11):封装
查看>>
python基础篇(10):自定义包
查看>>
python基础篇(10):类、对象与构造方法
查看>>
python系列【仅供参考】:python测试javaSDK总结
查看>>
python系列【仅供参考】:python斗地主
查看>>
Python基础教程(第2版 修订版) pdf
查看>>
python基础实践(四)
查看>>
Python基础学习笔记(九)常用数据类型转换函数
查看>>
Python基础学习参考(五):字符串和编码
查看>>
Python基础学习
查看>>
python基础变量之---集合
查看>>