iT邦幫忙

2023 iThome 鐵人賽

DAY 16
0
自我挑戰組

服用Python30天系列 第 16

[DAY16]服用Python-甘特圖

  • 分享至 

  • xImage
  •  

前言

今天來學甘特圖吧!

至於為什麼會學甘特圖呢?因為現在要開始進入做專題的階段,老師規定要用甘特圖來規劃接下來做專題的時間以及完成什麼事,因此今天就來學學以及認識甘特圖。


甘特圖(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()  #顯示甘特圖

https://ithelp.ithome.com.tw/upload/images/20231001/20163122bLRxOF3KYc.jpg

新增一些功能

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()

https://ithelp.ithome.com.tw/upload/images/20231001/20163122U1OsYtb1Pn.jpg

甘特圖就學到這裡,明天繼續加油~
目前進度:16/30···


上一篇
[DAY15]服用Python-折線圖
下一篇
[DAY17]服用Python-資料視覺化
系列文
服用Python30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言