python制作甘特图的基本知识(附Demo)

目录

  • 前言
  • [1. matplotlib](#1. matplotlib)
  • [2. plotly](#2. plotly)

前言

甘特图是一种常见的项目管理工具,用于表示项目任务的时间进度

直观地看到项目的各个任务在时间上的分布和进度

常用的绘制甘特图的工具是 matplotlib 和 plotly

主要以Demo的形式展示

1. matplotlib

功能强大的绘图库,适合制作静态的甘特图

python 复制代码
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"},
]

# 将数据转换为 DataFrame
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()

截图如下:

带有不同颜色的甘特图

python 复制代码
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"},
]

# 将数据转换为 DataFrame
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()

截图如下:

2. plotly

交互式绘图库,适合制作动态甘特图

python 复制代码
import plotly.express as px
import pandas as pd

# 创建数据
tasks = [
    {"Task": "Task A", "Start": "2024-01-01", "Finish": "2024-01-05"},
    {"Task": "Task B", "Start": "2024-01-02", "Finish": "2024-01-07"},
    {"Task": "Task C", "Start": "2024-01-08", "Finish": "2024-01-10"},
]

# 将数据转换为 DataFrame
df = pd.DataFrame(tasks)

# 使用 plotly 绘制甘特图
fig = px.timeline(df, x_start="Start", x_end="Finish", y="Task", title="Gantt Chart")
fig.update_yaxes(categoryorder="total ascending")

# 显示图形
fig.show()

截图如下:

带有任务分组的甘特图

python 复制代码
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"},
]

# 将数据转换为 DataFrame
df = pd.DataFrame(tasks)

# 使用 plotly 绘制甘特图
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()

截图如下:

相关推荐
明灯L9 分钟前
《函数基础与内存机制深度剖析:从 return 语句到各类经典编程题详解》
经验分享·python·算法·链表·经典例题
databook10 分钟前
不平衡样本数据的救星:数据再分配策略
python·机器学习·scikit-learn
碳基学AI15 分钟前
哈尔滨工业大学DeepSeek公开课:探索大模型原理、技术与应用从GPT到DeepSeek|附视频与讲义免费下载方法
大数据·人工智能·python·gpt·算法·语言模型·集成学习
niuniu_66616 分钟前
简单的自动化场景(以 Chrome 浏览器 为例)
运维·chrome·python·selenium·测试工具·自动化·安全性测试
FearlessBlot19 分钟前
Pyinstaller 打包flask_socketio为exe程序后出现:ValueError: Invalid async_mode specified
python·flask
独好紫罗兰29 分钟前
洛谷题单3-P5718 【深基4.例2】找最小值-python-流程图重构
开发语言·python·算法
正脉科工 CAE仿真42 分钟前
基于ANSYS 概率设计和APDL编程的结构可靠性设计分析
人工智能·python·算法
程序员一诺1 小时前
【Django开发】前后端分离django美多商城项目第15篇:商品搜索,1. Haystack介绍和安装配置【附代码文档】
后端·python·django·框架
kgduu2 小时前
打包python文件生成exe
python
Cool----代购系统API2 小时前
跨境速卖通与 API 接口数据分析
开发语言·python