首页 > 编程语言 >python制作甘特图的基本知识(附Demo)

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

时间:2024-07-13 13:55:42浏览次数:18  
标签:Task End python Demo 甘特图 2024 Start 01 df

目录

前言

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

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

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

主要以Demo的形式展示

1. 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"},
]

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

截图如下:

在这里插入图片描述

带有不同颜色的甘特图

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

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

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

截图如下:

在这里插入图片描述

带有任务分组的甘特图

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

截图如下:

在这里插入图片描述

标签:Task,End,python,Demo,甘特图,2024,Start,01,df
From: https://blog.csdn.net/weixin_47872288/article/details/140251752

相关文章

  • python 基础七 解析之 BeautifulSoup
    基本简介:安装以及创建:节点定位:节点信息:星巴克爬取:frombs4importBeautifulSoupimporturllib.requesturl='https://www.starbucks.com.cn/menu/'resp=urllib.request.urlopen(url)context=resp.read().decode('utf-8')soup=BeautifulSoup(conte......
  • python数据类型
    1.Int整数:int 可以表示正数、负数、零,主要用来进行数学运算。对于整数还可以进行位运算,共有6种位运算:取反(~)、左移(<>)、异或(^)、按位或(|)、按位与(&)。 int()数据类型能够转换成整数(文字、小数类字符串不能,浮点数转换直接抹零取整)。整数的进制:二进制表示形式:0b1101 (......
  • Python序列
    Python序列在Python中,序列类型包括字符串、列表、元组、集合和字典,这些序列支持以下几种通用的操作,但比较特殊的是,集合和字典不支持索引、切片、相加和相乘操作。字符串也是一种常见的序列,它也可以直接通过索引访问字符串内的字符。序列索引序列中,每个元素都有属于自己的编......
  • Python基础知识
    Python基础知识Python注释Python单行注释Python中使用井号(#)作为单行注释的符号,语法格式为:#注释内容也就是说,从符号#处开始,直到换行处结束,此部分内容都作为注释的内容,当程序执行时,这部分内容会被忽略。单行注释放置的位置,既可以是要注释代码的前一行,例如:#这是一行简单的......
  • python热门面试题三
    面试题1:Python中的列表推导式是什么?请给出一个例子。回答:列表推导式(ListComprehension)是Python中一种非常强大且简洁的构建列表的工具。它允许你通过一个表达式来创建一个新的列表,这个表达式定义了新列表中的元素应该如何从旧列表或其他可迭代对象中派生出来。列表推导式......
  • python热门面试题五
    当然,以下是两个Python经典面试题及其详细回答:面试题1:Python中的深拷贝和浅拷贝有什么区别?请举例说明。回答:在Python中,深拷贝(deepcopy)和浅拷贝(shallowcopy)是两种不同的拷贝机制,它们用于创建对象的副本。浅拷贝:创建一个新对象,但它包含的是对原始对象中包含项的引用,而不......
  • Python装饰器
    装饰器(Decorators)是Python的一个重要部分。我们现在想要在程序中定义两个函数,分别用类打印九九乘法表和计算N以内的数字累加的和。#定义功能:打印九九乘法表defprint_nine_table():forlineinrange(1,10):forcolumninrange(1,line+1):......
  • 第八篇:Python集合:高效的无序集数据结构
    1.集合的定义Python中的集合(set)是一种高度优化的无序且不重复的数据结构。它在概念上类似于数学中的集合,能够存储多个不同的元素。集合的这种特性使其成为处理唯一性和成员资格检查的理想选择。在Python中,我们可以通过两种主要方式定义集合:a)使用花括号{}:set1={1,......
  • 总结篇:Python数据类型总结
    在Python中,数据类型是编程的基础。理解和熟练运用各种数据类型及其操作方法,是编写高效、优雅代码的关键。本文将结合自己的理解,详细介绍Python中的几种基本数据类型及其常用操作。一.整数(Int)整数是最基本的数据类型之一,主要用于表示没有小数部分的数值。常用操作:1.声明整......
  • Python项目开发实战,掷硬币的连胜,案例教程编程实例课程详解
    在Python中进行实战项目,比如模拟掷硬币并记录连胜次数,是一个既有趣又能加深理解随机数生成、循环控制、条件判断等编程基础的好方法。下面,我将逐步引导你完成一个详细的Python项目,该项目将模拟掷硬币的过程,并追踪记录连胜的次数,同时我们会深入探讨一些编程概念,如函数封装、异常......