广告
返回顶部
首页 > 资讯 > 后端开发 > Python >一篇文章教你学会使用Python绘制甘特图
  • 501
分享到

一篇文章教你学会使用Python绘制甘特图

2024-04-02 19:04:59 501人浏览 泡泡鱼

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

摘要

目录优点局限一日一书 用来制作甘特图的专业工具也不少,常见的有:Microsoft Office Project、GanttProject、WARCHART XGantt、Jquer

fc299045b327d8722f785d0876e06dc3.gif

用来制作甘特图的专业工具也不少,常见的有:Microsoft Office Project、GanttProject、WARCHART XGantt、Jquery.Gantt、excel等,网络上也有一些优质工具支持在线绘制甘特图。

可是这种现成的工具,往往也存在一些弊端,让编程人员不知所措。比如说,花里胡哨的UI,让人目不暇接,不知点哪个才好:

5ac30b95e7a0d5fcb8ea8f910c4d69d9.png

比如说,有些基于浏览器的图表需要掌握htmljs编程语言,只会点python的我直接被劝退:

b31d71f02ee42e737683f0290ffd60e4.png

再比如,进来就是注册、登录、试用,等搞完了这波操作,时间、精力也耗费得差不多了:

8720d88001464ab39d64230a915a55a5.png

其实这种在线环境还有一个很大的弊端——安全性。我们永远也不知道用户的数据是去了开发者邮箱还是被短暂存储后销毁。

相比之下,还是简简单单的代码来的醒目、直观、安全又便捷。而且,第二种方式,使得图表的自定义程度也更高,配色、组件尺寸等调整也往往更加方便。

下面用一个例子来说明如何使用Python绘制甘特图:

背景:假定疫苗生产需经过CJ1、CJ2、CJ3、CJ4共4个工位,且必须按照CJ1-CJ2-CJ3-CJ4的顺序轮流在4个工位加工。为防止疫苗包装出现混乱,规定每个工位不能同时生产不同类型的疫苗,且疫苗生产不允许插队,即进入第一个工位安排的每类疫苗的生产顺序一旦确定就要一直保持不变,而且前一种类型的疫苗离开某个工位后,后一种类型的疫苗才能进入这个工位。已知各工位生产加工10种疫苗的平均时长(单位:min)如下表:

31f65c6a88400055602de6c4988756fb.png

目标:确定最短的总加工时间,并对生产过程以合适的方式进行呈现。

思路:在生产调度问题中,关于最短加工时长的目标优化问题,比较常见的算法是根据 Johnson 规则推广的 CDS 算法 ,在此不再赘述,感兴趣的朋友可以自行搜索。假定已确定的生产顺序为YM4-5-2-7-10-1-8-6-3-9,并计算出了每个工位的开始加工时间(单位:min),如下表:

0563bcdcb550d3dbb6864ab1f2a0b54d.png

针对生产过程呈现的问题,我们用Python绘制甘特图来进行可视化处理。

首先,导入依赖的库:


import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches

正常显示中文和负号:


plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

读取数据表,获取各工位加工时长和各工位开始加工时间:


df1 = pd.read_excel('time.xlsx', sheet_name='continue_time', index_col='YM')
df2 = pd.read_excel('time.xlsx', sheet_name='start_time', index_col='YM')
 
CJS = ['CJ1', 'CJ2', 'CJ3', 'CJ4']
YMS = ['YM4', 'YM5', 'YM2', 'YM7', 'YM10', 'YM1', 'YM8', 'YM6', 'YM3', 'YM9']
 
# continue_time:各工位加工时长,start_time:各工位开始加工时间
continue_time = []
start_time = []
for cj in CJS:
    continue_time.append([ym for ym in df1[cj][YMS]])
    start_time.append([ym for ym in df2[cj][YMS]])

获取数组大小,用于之后的循环:


m = range(len(continue_time))
n = range(len(continue_time[0]))

以下是绘图过程:


# 指定每个水平柱子颜色
colors = ['r', 'pink', 'orange', 'y', 'g', 'b', 'deeppink', 'purple', 'brown', 'black']
 
# 设置画布大小和分辨率
plt.figure(figsize=(20, 8), dpi=200)
# barh:水平柱状图,设置循坏迭代以绘制层叠效果
for i in m:
    for j in n:
        plt.barh(m[i] + 1, continue_time[i][j], left=start_time[i][j], color=colors[j])
plt.title("疫苗生产甘特图", fontsize=17)
labels = [''] * len(continue_time[0])
for f in n:
    labels[f] = "YM%d" % (f + 1)
# 添加图例
patches = [mpatches.Patch(color=colors[i],label="{:s}".fORMat(labels[i])) for i in range(len(continue_time[0]))]
plt.legend(handles=patches, loc=4)
# XY轴标签
plt.xlabel("加工时间/分钟", fontsize=15)
plt.ylabel("各工位加工流程", fontsize=15)
# XY轴刻度
plt.yticks([1, 2, 3, 4], ['CJ1', 'CJ2', 'CJ3', 'CJ4'])
# 网格线,此图使用不好看,注释掉
# plt.grid(linestyle="--",alpha=0.5)
plt.savefig('gatte.jpg')
plt.show()

到此为止,一副甘特图就完工了。

7a6f5535b62ed4228a5b46bec2eafe9f.png

可是对于咱们充满艺术细胞的数据从业者来说,图表的颜值也是相当重要,因此我们在来一个小小的美化,只需修改设置一下渐变配色列表就好~(来自十八线美工的手动配置)


colors = ['#3B9DD3', '#41ADE8', '#48BEFF', '#44D5FF', '#40EBFF', '#40E0CF', '#43C59E', '#42B091', '#409B83', '#51A48E']

于是乎,一副精美的甘特图出来了~

18c6809091851617597325592e34993a.png

考虑到有些小伙伴不是很喜欢渐变色,或者对色彩的区分度要求比较高,亦或者,老板大人是个色狼,哦不对,色盲,那么下一种配色方案就显得格外重要了

(将上面第一步的设置渐变配色列表替换为以下内容即可~)


from colour import Color
red = Color("red")
colors = list(red.range_to(Color("purple"), 14))
colors = [color.rgb for color in colors]

结果如下:

477dad202494a2b61ec809ed73c7252b.png

是漂亮的彩虹色!无论对方是女王御姐萝莉正太少女还是奶狗学长大叔气质男神,分分钟给他征服!这也是一个很通用的小技巧,对于可视化工作有很大帮助~

最后,简单总结一下甘特图优缺点。

优点

1.醒目、直观、易于理解;

2.方便调配各项业务及工作流程的时间安排;

3.有专业软件支持,无须担心复杂计算和分析。

局限

1.仅仅部分地反映了活动流程的时间、成本和范围约束;

2.不适用于时间依赖关系过复杂的场景,否则将大大提高读图成本。

一日一书

数据分析从Excel到Power BI:Power BI商业数据分析思维、技术与实践》本书以 Power BI 数据分析软件为平台,将企业实际工作需求作为出发点,分别从思维、技术、实践这三个方面,全面系统地讲解和分享了Power BI在企业日常数据分析场景的运用思维、实操技能及综合管理应用的思路。

以上就是一篇文章教你学会使用Python绘制甘特图的详细内容,更多关于Python绘图的资料请关注编程网其它相关文章!

--结束END--

本文标题: 一篇文章教你学会使用Python绘制甘特图

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

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

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

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

下载Word文档
猜你喜欢
  • 一篇文章教你学会使用Python绘制甘特图
    目录优点局限一日一书 用来制作甘特图的专业工具也不少,常见的有:Microsoft Office Project、GanttProject、WARCHART XGantt、jQuer...
    99+
    2022-11-12
  • 一篇文章教你用Python绘画一个太阳系
    目录日地月三体日地火太阳系你们要的3D太阳系 图片上传之后不知为何帧率降低了许多。。。 日地月三体 所谓三体,就是三个物体在重力作用下的运动。由于三点共面,所以三个质点仅在重力作用下...
    99+
    2022-11-12
  • 一篇文章教会你用Unity制作网格地图生成组件
    目录前言1,创建组建出网格的基本单元2,编辑网格创建脚本3,地图生成案例总结前言 如果你玩过三国志这种类型的战旗游戏或者模拟城市、部落冲突、海岛奇兵这种模拟经营类的游戏,那么你对网格...
    99+
    2022-11-12
  • 一篇文章教会你使用gs_restore导入数据
    目录背景信息命令格式示例总结背景信息 gs_restore是openGauss提供的针对gs_dump导出数据的导入工具。通过此工具可将由gs_dump生成的导出文件进行导入。 gs_restore工具由操作系统用户om...
    99+
    2022-09-05
  • 一文教会你用Python绘制动态可视化图表
    目录前言安装模块可视化动态图太阳图指针图桑基图平行坐标图总结前言 对数据科学家来说,讲故事是一个至关重要的技能。为了表达我们的思想并且说服别人,我们需要有效的沟通。而漂漂亮亮的可视化...
    99+
    2022-11-11
  • 一文教你如何使用Python绘制瀑布图
    目录前期准备方法一:waterfall_ax方法二:waterfall_chart方法三:plotly什么是瀑布图?瀑布图用表达两个数值之间的变化过程,过程值为正的时候,向上加,过程...
    99+
    2023-05-16
    Python绘制瀑布图 Python 瀑布图
  • 一篇文章教你用Python实现一个学生管理系统
    目录片头源码:总结片头 Python看了差不多三四天吧,基本上给基础看差不多了。写个管理系统吧,后续不出意外SQL、文件存储版本都会更。 学习Python感想: ...
    99+
    2022-11-12
  • 一篇文章教会你使用java爬取想要的资源
    目录说明方法摘要常用的Element节点方法实战:爬取B站番剧Maven代码说明 简介: 你还在为想要的资源而获取不到而烦劳吗?你还在为你不会python而爬取不到资源而烦劳吗?没关...
    99+
    2022-11-12
  • 一文教会你使用Python批量缩放图片
    目录导读实际演示阶段详细介绍该库总结导读 为了解决图片被改变大小后,比例保持不变(这样就不会变形了) 图片需要压缩,避免填图后的word文件太大通过Image模块中的resize函数...
    99+
    2022-11-13
  • 一篇文章教你用JavaScript使用流程控制打印九九乘法表
    目录一、选择结构if单分支语句if…else双分支语句if…elseif…else多分支语句switch多分支语句二、循环结构while循环...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作