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

目录

  • 前言
  • 1. matplotlib
  • 2. plotly

前言

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

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

常用的绘制甘特图的工具是 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()

截图如下:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/44546.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

内网对抗-基石框架篇单域架构域内应用控制成员组成用户策略信息收集环境搭建

知识点: 1、基石框架篇-单域架构-权限控制-用户和网络 2、基石框架篇-单域架构-环境搭建-准备和加入 3、基石框架篇-单域架构-信息收集-手工和工具1、工作组(局域网) 将不同的计算机按照功能分别列入不同的工作组。想要访问某个部门的资源,只要在“网络…

Electron运行报错:Error Cannot find module ‘node_moduleselectroncli.js‘

Electron运行报错:Error: Cannot find module ‘node_modules\electron\cli.js’ 顾名思义,命令行执行Electron .时候,会优先从项目目录查找对应依赖,如果是报错显示是找不到项目目录下的依赖,我们可以从安装在全局的…

DAMA学习笔记(五)-数据存储和操作

1.引言 数据存储与操作包括对存储数据的设计、实施和支持,最大化实现数据资源的价值,贯穿于数据创建/获取到处置的整个生命周期。 数据存储与操作包含两个子活动(图6-1)。 图6-1 语境关系图:数据存储与操作 (1) 数据库…

记录vite项目中Cornerstone的兼容问题(持续更新)

🔎 在vite项目中打包提示错误 ESM integration proposal for Wasm" is not supported currently. ⛳️ 问题描述 Error: Could not load /home/xxx/xxx/node_modules/icr/polyseg-wasm/dist/ICRPolySeg.wasm (imported by node_modules/icr/polyseg-wasm/di…

js ES6 part3

Number 是内置构造函数&#xff0c;用来创建数值 const price 12.345console.log(price.toFixed(2))//保留两位小数 12.35 综合案例购物车 <body><div class"list"><!-- <div class"item"><img src"https://yanxuan-item…

【代码随想录】【算法训练营】【第66天】 [卡码95]城市间货物运输II [卡码96]城市间货物运输III

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 卡码网。 day 66&#xff0c;周五&#xff0c;ding ding~ [卡码95] 城市间货物运输II 题目描述 卡码95 城市间货物运输II 解题思路 前提&#xff1a; 思路&#xff1a; 重点&#xff1a; 代码实现 C语言 …

数据结构(Java):队列Queue集合力扣面试OJ题

1、队列 1.1 队列的概念 队列是一个特殊的线性表&#xff0c;只允许在一端&#xff08;队尾&#xff09;进行插入数据操作&#xff0c;在另一端&#xff08;对头&#xff09;进行删除数据。队列具有先进先出FIFO(First In First Out)的特性。 入队&#xff1a;数据只能从队尾…

有奖竞猜!斗牛士军团与法兰西骑士的终极之战,谁将笑傲欧洲之巅?

痛快看球&#xff0c;畅玩游戏&#xff0c;AGON爱攻带你进入酣畅淋漓的足球世界&#xff01; 7月15日&#xff0c;绿茵赛场硝烟再起&#xff0c;两支身披荣光的王者之师&#xff0c;一路过关斩将&#xff0c;最终会师决赛。一场万众瞩目的巅峰对决即将拉开帷幕&#xff0c;究竟…

linux UDP通讯:接口函数示例

一、主要用的接口&#xff1a; //服务器端 1. socket() 创建套接字 2. bind() 绑定套接字 与TCP区别开来&#xff0c;没有listen()、accept()建立连接的过程 3. 通信 recvfrom() sendto() 4. close //客户端 1. socket() 创建套接字 与TCP区别开来&#xff0c;没有connect()建立…

数据结构——排序算法(冒泡、快速、选择、插入)

文章目录 1. 概念 2. 十大排序算法 3. 冒泡排序 4. 冒泡代码实现 5. 快速排序 6. 快速代码实现 7. 选择排序 8. 选择代码实现 9. 插入排序 10. 插入代码实现 1. 概念 排序&#xff08;Sort&#xff09;是将无序的记录序列&#xff08;或称文件&#xff09;调整成有序…

LabVIEW前面板占满整个屏幕(转)

希望在运行一个LabVIEW程序时&#xff0c;它的前面板能够占据整个屏幕&#xff0c;且不显示Windows的任务栏或其他任何的LabVIEW菜单选项。怎样才能实现这一功能&#xff1f; 您可以通过手动配置或编程的方式实现该功能。 手动配置VI属性 您可以通过以下操作&#xff0c;将…

导入项目,JAVA文件是咖啡杯图标

问题 从图中可以看到&#xff0c;JAVA文件是咖啡杯图标 原因 项目没有识别为MAVEN项目 解决办法 进入pom.xml文件&#xff0c;右键点击Add as Maven Project即可

在Ubuntu 16.04上安装和保护MongoDB的方法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 简介 MongoDB 是一个免费且开源的面向文档的数据库。它被归类为 NoSQL 数据库&#xff0c;因为它不依赖于传统的基于表的关系型数据库结…

Spring MVC入门3

看完这篇博客你能学到什么 理解JSON的使用理解注解PathVariable理解解注解RequestPart理解cookie和Session的基本概念理解cookie和Session的区别 如果想真正掌握&#xff0c;还需要自己勤加练习。 正文 JSON JSON概念 JSON&#xff1a;JavaScript Object Notation 【JavaS…

【YOLOv8】 用YOLOv8实现数字式工业仪表智能读数(一)

上一篇圆形表盘指针式仪表的项目受到很多人的关注&#xff0c;咱们一鼓作气&#xff0c;把数字式工业仪表的智能读数也研究一下。本篇主要讲如何用YOLOV8实现数字式工业仪表的自动读数&#xff0c;并将读数结果进行输出&#xff0c;若需要完整数据集和源代码可以私信。 目录 &…

gin源码分析

一、高性能 使用sync.pool解决频繁创建的context对象&#xff0c;在百万并发的场景下能大大提供访问性能和减少GC // ServeHTTP conforms to the http.Handler interface. // 每次的http请求都会从sync.pool中获取context&#xff0c;用完之后归还到pool中 func (engine *Engin…

在C++中怎样使用C库

在C中使用C库是一个相对直接的过程&#xff0c;因为C是从C发展而来的&#xff0c;并且与C高度兼容。这意味着你可以直接在C代码中使用C库函数、头文件和变量&#xff0c;而无需进行特殊转换。以下是一些基本的步骤和注意事项&#xff0c;用于在C中使用C库&#xff1a; 1. 包含…

c语言位操作符相关题目之交换两个数的值

文章目录 一、题目二、方法11&#xff0c;思路2&#xff0c;代码实现 三、方法21&#xff0c;思路2&#xff0c;代码实现 四、方法31&#xff0c;思路2&#xff0c;代码实现 总结 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、题目 实现两个变量的…

浅谈PostCSS

1. 背景 css的预处理器语言&#xff08;比如 sass&#xff0c; less&#xff0c; stylus&#xff09;的扩展性不好&#xff0c;你可以使用它们已有的功能&#xff0c;但如果想做扩展就没那么容易。 sass是很常用的css预处理器语言&#xff0c;在webpack中要使用它&#xff0c;…

设计模式使用场景实现示例及优缺点(结构型模式——组合模式)

结构型模式 组合模式&#xff08;Composite Pattern&#xff09; 组合模式使得用户对单个对象和组合对象的使用具有一致性。 有时候又叫做部分-整体模式&#xff0c;它使我们树型结构的问题中&#xff0c;模糊了简单元素和复杂元素的概念&#xff0c;客户程序可以像处理简单元…