今天來學甘特圖吧!
至於為什麼會學甘特圖呢?因為現在要開始進入做專題的階段,老師規定要用甘特圖來規劃接下來做專題的時間以及完成什麼事,因此今天就來學學以及認識甘特圖。
甘特圖(Gantt Chart)又稱作條狀圖(Bar chart),是一種經常用於執行專案的時間管理工具,以橫軸(x軸)代表時間,縱軸(y軸)代表活動或項目,中間各項線條則代表項目的開始與結束的時間,其目的可以清楚了解到每個項目的開始時間、所花的時間以及結束日期。
甘特圖範例:
import matplotlib.pyplot as plt
from datetime import datetime, timedelta
tasks = ['task1', 'task2', 'task3', 'task4']# 任務名稱
# 任務的開始和結束的日期
start_dates = [datetime(2023, 9, 13), datetime(2023, 9, 21), datetime(2023, 9, 28), datetime(2023, 10, 5)]
end_dates = [datetime(2023, 9, 20), datetime(2023, 9, 27), datetime(2023, 10, 4), datetime(2023, 10, 18)]
# 繪製甘特圖
plt.figure(figsize=(12, 5))
for i, task in enumerate(tasks):
plt.barh(task, width=(end_dates[i] - start_dates[i]).days, left=start_dates[i])
# 新增標籤和x,y軸
plt.title('Gantt Chart')
plt.xlabel('dates')
plt.ylabel('task')
# 設定X軸的日期刻度
plt.gca().xaxis.set_major_formatter(plt.matplotlib.dates.DateFormatter('%Y-%m-%d'))
plt.xticks(rotation=45) #日期傾斜45度
plt.show() #顯示甘特圖
新增一些功能
import matplotlib.pyplot as plt
from datetime import datetime, timedelta
# 專案名稱
projects = ['project1', 'project2', 'project3', 'project4']
# 專案開始和結束的日期
start_dates = [datetime(2023, 9, 13), datetime(2023, 9, 25), datetime(2023, 10, 10), datetime(2023, 10, 25)]
end_dates = [datetime(2023, 9, 28), datetime(2023, 10, 7), datetime(2023, 10, 23), datetime(2023, 11, 7)]
# 自訂顏色
colors = ['skyblue', 'pink', 'orange', 'yellow']
# 繪製甘特圖
fig, ax = plt.subplots(figsize=(12, 5))
for i, task in enumerate(tasks):
start_date = start_dates[i]
end_date = end_dates[i]
duration = end_date - start_date
# 使用自訂顏色繪製甘特圖
ax.barh(task, left=start_date, width=duration, label=task, color=colors[i])
# 新增結束日期
ax.text(end_date, i, f'{end_date.strftime("%Y-%m-%d")}', va='center', ha='left', fontsize=10, color='black')
# 新增標題和x,y軸
ax.set_title('Gantt Chart')
ax.set_xlabel('dates')
ax.set_ylabel('projects')
# 設置X軸的日期刻度
date_format = '%Y-%m-%d'
ax.xaxis.set_major_formatter(plt.matplotlib.dates.DateFormatter(date_format))
plt.xticks(rotation=45) # 日期傾斜45度
ax.legend(loc='upper left') #新增圖例
# 顯示甘特圖
plt.tight_layout()
plt.show()
甘特圖就學到這裡,明天繼續加油~
目前進度:16/30···