生成可视化甘特图和进度条是项目管理中常见的需求。下面我将介绍如何利用Python的matplotlib库来自动生成甘特图,并使用自定义函数来在甘特图上添加进度条。
首先,我们需要安装必要的库:
```bash
pip install matplotlib
pip install pandas
```
接下来,我们编写一个Python脚本来生成甘特图,并在其中添加进度条。
```python
import matplotlib.pyplot as plt
import pandas as pd
from datetime import datetime, timedelta
# 定义任务列表
tasks = [
{"name": "Task1", "duration": 10},
{"name": "Task2", "duration": 15},
{"name": "Task3", "duration": 20},
{"name": "Task4", "duration": 30}
]
# 定义开始和结束日期
start_date = datetime(2022, 1, 1)
end_date = datetime(2022, 1, 31)
# 创建数据框
df = pd.DataFrame(tasks, columns=["Name", "Duration"])
# 计算每个任务的持续时间
for i in range(len(tasks)):
- df.at[i, "Duration"] = (end_date
- start_date).days / tasks[i]["duration"]
# 设置甘特图样式
plt.style.use('ggplot')
plt.xlabel("Days")
plt.ylabel("Task")
plt.title("Gantt Chart of Tasks")
plt.grid()
# 绘制甘特图
plt.bar(df.index, df["Duration"], color='skyblue', alpha=0.7)
# 添加进度条
def add_progress_bar(bar, days, duration):
height = bar.get_height() + 0.5 * duration
plt.barh([0], height, color='darkgray', alpha=0.5)
for i, value in enumerate(days):
plt.text(value, height, f'{days[i]:.0f}%', ha='center', va='bottom')
plt.gca().set_aspect('equal', adjustable='box')
plt.show()
for i in range(len(df)):
add_progress_bar(df.iloc[i]["Bar"].get_height(), df.iloc[i]["Duration"], df.iloc[i]["Duration"])
# 显示结果
plt.show()
```
这个脚本首先定义了一个任务列表和一个开始和结束日期。然后,它使用pandas库创建一个数据框,将任务按名称和持续时间分组。接着,它计算每个任务的持续时间,并将其添加到数据框中。
接下来,我们设置甘特图的样式,并绘制甘特图。最后,我们为每个任务添加进度条,使其显示任务的完成百分比。
运行此脚本后,您将看到一个简单的甘特图,其中包含进度条。您可以根据需要调整样式和参数。