iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python如何使用Matplotlib绘制甘特图
  • 928
分享到

Python如何使用Matplotlib绘制甘特图

2023-06-22 03:06:52 928人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

小编给大家分享一下python如何使用Matplotlib绘制甘特图,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1.引言甘特图已经拥有 100 多年的历史,这种可视化图表对项目管理非常有用。Henry Gantt 为了分

小编给大家分享一下python如何使用Matplotlib绘制甘特图,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

1.引言

甘特图已经拥有 100 多年的历史,这种可视化图表对项目管理非常有用。

Python如何使用Matplotlib绘制甘特图

Henry Gantt 为了分析已经完成的项目创建了甘特图,他最初设计这个可视化工具主要用来衡量员工的工作效率并从中识别表现不佳的员工。经过多年的发展,甘特图已经发展成项目规划和跟踪的必备工具。

本文主要介绍如何使用Matplotlib来绘制甘特图,并不断优化我们的可视化效果。

闲话少说,我们直接开始吧。 :)

2.举个栗子

首先我们导入pandas和Numpy库,这两个库可以帮助我们进行数据预处理。

import pandas as pdimport matplotlib.pyplot as pltimport numpy as np

为了举例,这里采用一个项目管理的数据集,如下所示为对应的读取代码:

df = pd.read_excel('../data/plan.xlsx')df

结果如下:

Python如何使用Matplotlib绘制甘特图

上图所示,我们一共有14个Task,从TaskA到TaskM。其中每一行依次表示编号,Task名字,Task所属部门,Task开始日期,Task结束日期,以及已经完成了多少。

3.数据预处理

为了使我们的绘图变得更加容易,我们需要增加一些变量。
首先我们需要设置整个项目开始日期,接着,我们将添加一列,用于表示从项目开始日期到每个子任务开始的天数;这将有助于在 x 方向上定位每个子任务的位置。

同理,我们对从项目开始日期到子任务结束的天数也增加一列,这将有助于计算完成子任务所需的总的天数。

编写代码如下:

# project start dateproj_start = df.Start.min()# number of days from project start to task startdf['start_num'] = (df.Start - proj_start).dt.days# number of days from project start to end of tasksdf['end_num'] = (df.End - proj_start).dt.days# days between start and end of each taskdf['days_start_to_end'] = df.end_num - df.start_num

运行结果如下:

Python如何使用Matplotlib绘制甘特图

如上图所示,我们设置整个项目的开始日期为2022-02-15,我们增加了3列,依次为start_num用于表示子任务开始日期到整个项目开始日期的天数,end_num用于表示子任务结束日期到整个项目开始日期的天数,days_start_to_end用于表示完成子任务所需要的天数。

4.绘制甘特图

做好上述准备,我们就可以绘制我们的甘特图了。这里我们使用Matplotlib中的条形图进行绘制。
Y轴表示任务名称,每个子项的宽度表示子任务开始和结束之间的天数,子项的起始位置为从项目开始到子任务开始之间的天数。
绘制代码如下:

fig, ax = plt.subplots(1, figsize=(16,6))ax.barh(df.Task, df.days_start_to_end, left=df.start_num)plt.show()

运行结果如下:

Python如何使用Matplotlib绘制甘特图

5.添加颜色

观察上图,我们绘制了最简单的条形图用来表示项目管理。但是太粗糙了,接着我们来一步一步进行改进吧。。。
首先我们观察上图,条形图中的子项都是同一颜色,区分度不明显,但是我们数据中每项任务都有归属部门,我们可以对不同部门设置不同颜色。代码如下:

# create a column with the color for each departmentdef color(row):    c_dict = {'MKT':'#E64646', 'FIN':'#E69646', 'ENG':'#34D05C', 'PROD':'#34D0C3', 'IT':'#3475D0'}    return c_dict[row['Department']]df['color'] = df.apply(color, axis=1)

同时我们观察到上图中x轴为数字,所代表的含义并不直观,我们将其转化为日期每隔三天进行一次显示。这样我们优化后x轴日期显示代码如下:

from matplotlib.patches import Patchfig, ax = plt.subplots(1, figsize=(16,6))ax.barh(df.Task, df.days_start_to_end, left=df.start_num, color=df.color)##### LEGENDS #####c_dict = {'MKT':'#E64646', 'FIN':'#E69646', 'ENG':'#34D05C',          'PROD':'#34D0C3', 'IT':'#3475D0'}legend_elements = [Patch(facecolor=c_dict[i], label=i)  for i in c_dict]plt.legend(handles=legend_elements)##### TICKS #####xticks = np.arange(0, df.end_num.max()+1, 3)xticks_labels = pd.date_range(proj_start, end=df.End.max()).strftime("%m/%d")xticks_minor = np.arange(0, df.end_num.max()+1, 1)ax.set_xticks(xticks)ax.set_xticks(xticks_minor, minor=True)ax.set_xticklabels(xticks_labels[::3])plt.show()

运行结果如下:

Python如何使用Matplotlib绘制甘特图

6.添加透明度

仔细观察上图,是不是比第一版美观很多。我们观察我们的数据,发现我们还有一列Completeness没有进行可视化,我们知道它代表每项子任务的完成度。接着我们来对齐进行可视化。

# days between start and current progression of each taskdf['current_num'] = (df.days_start_to_end * df.Completion)

我们将新创建一个条形图,子项为上述每项子任务的完成度。同时我们将在子项的末尾写上完成度的百分比。

为了区分已完成和未完成,我们可以使用参数alpha将未完成部分设置成透明效果。

代码如下:

from matplotlib.patches import Patchfig, ax = plt.subplots(1, figsize=(16,6))# barsax.barh(df.Task, df.current_num, left=df.start_num, color=df.color)ax.barh(df.Task, df.days_start_to_end, left=df.start_num, color=df.color, alpha=0.5)# textsfor idx, row in df.iterrows():    ax.text(row.end_num+0.1, idx,             f"{int(row.Completion*100)}%",             va='center', alpha=0.8)##### LEGENDS #####c_dict = {'MKT':'#E64646', 'FIN':'#E69646', 'ENG':'#34D05C', 'PROD':'#34D0C3', 'IT':'#3475D0'}legend_elements = [Patch(facecolor=c_dict[i], label=i)  for i in c_dict]plt.legend(handles=legend_elements)##### TICKS #####xticks = np.arange(0, df.end_num.max()+1, 3)xticks_labels = pd.date_range(proj_start, end=df.End.max()).strftime("%m/%d")xticks_minor = np.arange(0, df.end_num.max()+1, 1)ax.set_xticks(xticks)ax.set_xticks(xticks_minor, minor=True)ax.set_xticklabels(xticks_labels[::3])plt.show()

运行结果如下:

Python如何使用Matplotlib绘制甘特图

7.再优化

最后,为了让我们的甘特图更具有吸引力。我们可以绘制网格线,添加我们的标题说明图表用途。

代码较长,不在粘贴。后文有完整代码获取方式。

最后的可视化结果如下:

Python如何使用Matplotlib绘制甘特图

当然也可以设置背景色,以突出前景条目。效果如下所示:

Python如何使用Matplotlib绘制甘特图

看完了这篇文章,相信你对“Python如何使用Matplotlib绘制甘特图”有了一定的了解,如果想了解更多相关知识,欢迎关注编程网Python频道,感谢各位的阅读!

--结束END--

本文标题: Python如何使用Matplotlib绘制甘特图

本文链接: https://www.lsjlt.com/news/302111.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python如何使用Matplotlib绘制甘特图
    小编给大家分享一下Python如何使用Matplotlib绘制甘特图,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1.引言甘特图已经拥有 100 多年的历史,这种可视化图表对项目管理非常有用。Henry Gantt 为了分...
    99+
    2023-06-22
  • Python使用Matplotlib绘制甘特图的实践
    目录1.引言2.举个栗子3.数据预处理4.绘制甘特图5.添加颜色6.添加透明度7.再优化8. 总结1.引言 甘特图已经拥有 100 多年的历史,这种可视化图表对项目管理非常有用。 ...
    99+
    2024-04-02
  • matplotlib绘制甘特图的万能模板案例
    目录定义一个绘制甘特图的类调用及数据格式类似于展示的图形定义一个绘制甘特图的类 # -*- coding: utf-8 -*- from datetime import date...
    99+
    2024-04-02
  • Python怎么实现甘特图绘制
    这篇“Python怎么实现甘特图绘制”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python怎么实现甘特图绘制”文章吧。前...
    99+
    2023-07-06
  • 如何使用python matplotlib绘制散点图
    今天小编给大家分享一下如何使用python matplotlib绘制散点图的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一...
    99+
    2023-07-02
  • 如何使用Python Matplotlib绘制条形图
    目录前言一、一般条形图二、横向条形图三、分组条形图的绘制四、堆叠条形图绘制总结 前言 matplotlib是一个非常强大的Python第三方绘图包,可以绘制非常多非常漂亮的...
    99+
    2024-04-02
  • 一篇文章教你学会使用Python绘制甘特图
    目录优点局限一日一书 用来制作甘特图的专业工具也不少,常见的有:Microsoft Office Project、GanttProject、WARCHART XGantt、jQuer...
    99+
    2024-04-02
  • Python中如何使用Matplotlib库绘制图形
    目录前言一、简单的正弦函数与余弦函数二、进阶版正弦函数与余弦函数1.改变颜色与粗细2.设置图片边界3.设置记号4.设置记号的标签5.设置X,Y轴6.完整代码三、绘制简单的折线图总结前...
    99+
    2024-04-02
  • 如何使用python的matplotlib绘制折线图
    这篇文章主要介绍“如何使用python的matplotlib绘制折线图”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“如何使用python的matplotlib绘制折线图”文章能帮助大家解决问题。pl...
    99+
    2023-07-02
  • python使用matplotlib绘制折线图
    前言: 我的python学习也告一段落了。不过有些,方法还是打算总结一下和大家分享。我整理了使用matplotlib绘制折线图的一般步骤,按照这个步骤走绘制折线图一般都没啥问题。其实...
    99+
    2024-04-02
  • Python Matplotlib如何绘制多子图
    这篇文章将为大家详细讲解有关Python Matplotlib如何绘制多子图,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。通过获取子图的label和线型来合并图例注意添加label#导入数据(读...
    99+
    2023-06-29
  • Python+matplotlib如何绘制堆叠图
    这篇文章主要介绍Python+matplotlib如何绘制堆叠图,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、水平堆叠图堆叠图其实就是柱状图的一种特殊形式from matplotlib imp...
    99+
    2023-06-29
  • Python实现甘特图绘制的示例详解
    目录前期准备页面的结构代码部分主页面的开发-Section 1主页页面的开发-Section 2相信大家在平常实际工作当中,需要对整体的项目做一个梳理,这时如果有一个网页应用能够对整...
    99+
    2023-05-15
    Python绘制甘特图 Python甘特图
  • Python如何绘制Matplotlib折线图
    本篇内容介绍了“Python如何绘制Matplotlib折线图”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、Matplotlib 绘图在...
    99+
    2023-06-30
  • Python如何绘制Matplotlib散点图
    本篇内容主要讲解“Python如何绘制Matplotlib散点图”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python如何绘制Matplotlib散点图”吧!使用plt.plot方法:在上篇...
    99+
    2023-06-30
  • 利用Matlab绘制甘特图的方法详解
    目录前言工具函数完整代码使用方法基本使用不咋好看的圆角修改Y轴标签添加每个任务上的文本信息单独修改任务标签信息修改颜色前言 好久不见哈,今天带来一个不咋炫酷但是比较实用的甘特图绘制,...
    99+
    2022-11-13
    Matlab绘制甘特图 Matlab 甘特图
  • Python matplotlib如何实现图形绘制
    本篇内容主要讲解“Python matplotlib如何实现图形绘制”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python matplotlib如何实现图形绘制”吧!1....
    99+
    2023-06-21
  • Python用 matplotlib 绘制柱状图
    目录1. 柱状图概述1.1什么是柱状图1.2柱状图使用场景1.3柱状图绘制步骤1.3案例展示 2. 柱状图属性2.1柱状体颜色填充2.2状描边设置2.3状体边框宽度2.4刻度标签3....
    99+
    2024-04-02
  • Python中matplotlib如何绘制散点图
    小编给大家分享一下Python中matplotlib如何绘制散点图,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!在python中画散点图主要是用matplotlib模块中的scatter函数,先来看一下scatter函数的...
    99+
    2023-06-15
  • 怎么使用Python Matplotlib绘制条形图
    今天小编给大家分享一下怎么使用Python Matplotlib绘制条形图的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一...
    99+
    2023-07-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作