用python写出生成甘特图的代码

时间: 2023-05-23 15:04:48 浏览: 138
以下是用Python写出生成甘特图的代码的示例: ```python import plotly.express as px import pandas as pd # 定义数据集 df = pd.DataFrame([ dict(Task="任务1", 开始='2022-01-01', 完成='2022-01-31'), dict(Task="任务2", 开始='2022-03-01', 完成='2022-04-15'), dict(Task="任务3", 开始='2022-06-01', 完成='2022-06-30') ]) # 生成甘特图 fig = px.timeline(df, x_start="开始", x_end="完成", y="Task") # 显示图表 fig.show() ``` 这段代码首先引入了`plotly`和`pandas`库,然后定义了一个包含任务、开始时间和结束时间的数据集,创建了一个甘特图用于可视化数据,最后通过`fig.show()`方法将图表显示出来。您可以根据需要修改任务和时间的数据以及其他图表属性来自定义并生成甘特图。
相关问题

用python写出生成车间调度问题甘特图的代码

下面是用Python生成车间调度问题甘特图的代码: ```python import pandas as pd import numpy as np import matplotlib.pyplot as plt import datetime # 创建数据 orders = pd.DataFrame({'order_id': [1, 2, 3, 4, 5], 'start': ['2022-12-01 00:00:00', '2022-12-01 00:00:00', '2022-12-01 00:00:00', '2022-12-02 00:00:00', '2022-12-02 00:00:00'], 'end': ['2022-12-02 00:00:00', '2022-12-02 00:00:00', '2022-12-02 00:00:00', '2022-12-03 00:00:00', '2022-12-03 00:00:00'], 'process_time': [24, 36, 48, 24, 48]}) # 转换时间格式 orders['start'] = pd.to_datetime(orders['start'], format='%Y-%m-%d %H:%M:%S') orders['end'] = pd.to_datetime(orders['end'], format='%Y-%m-%d %H:%M:%S') # 计算任务的开始和结束时间 tasks = [] for index, row in orders.iterrows(): task_start = row['start'] task_end = row['start'] + datetime.timedelta(hours=row['process_time']) tasks.append((row['order_id'], task_start, task_end)) orders.loc[index, 'start'] = task_start orders.loc[index, 'end'] = task_end # 将任务转换为DataFrame tasks_df = pd.DataFrame(tasks, columns=['order_id', 'start', 'end']) tasks_df = tasks_df.sort_values(by='start') # 计算目标日期范围 start_date = tasks_df['start'].min() end_date = tasks_df['end'].max() # 创建日期范围 dates = pd.date_range(start=start_date, end=end_date, freq='H') # 创建甘特图数据 gantt_data = {} for order_id, df in tasks_df.groupby('order_id'): gantt_data[order_id] = np.zeros(len(dates)) for index, row in df.iterrows(): start_index = dates.get_loc(row['start']) end_index = dates.get_loc(row['end']) gantt_data[order_id][start_index:end_index] = 1 # 创建甘特图 fig, ax = plt.subplots(figsize=(10, 5)) for order_id, data in gantt_data.items(): y = [order_id + 0.5, order_id + 0.5] x = [dates[0], dates[-1] + pd.Timedelta(hours=1)] ax.plot(x, y, color='black') ax.fill_between(dates, y[0], y[1], where=data == 1, color='green') # 设置横轴和纵轴 ax.set_yticks(range(1, len(orders) + 1)) ax.set_yticklabels(orders['order_id'].values) ax.set_xlabel('时间') ax.set_ylabel('订单编号') plt.show() ``` 在上面的代码中,我们首先创建了一个数据框,其中包含每个订单的开始时间、结束时间和加工时间。我们将开始时间和结束时间的格式转换为datetime,以便我们可以更容易地进行计算。 接下来,我们计算每个任务的实际开始时间和结束时间,并将其存储在一个名为tasks的列表中。我们还在orders数据帧中更新了开始和结束时间的值。 然后,我们将任务转换为名为tasks_df的数据框,该数据框包含每个任务的订单号、开始时间和结束时间。我们按开始时间对任务数据框进行了排序,并计算了目标日期范围。 我们使用pandas.date_range函数创建了一个日期时间范围以表示甘特图中的时间轴。然后,我们循环每个任务,创建名为gantt_data的字典来存储甘特图数据,其中键是订单编号,值为一个长度为时间轴长度的numpy数组,该数组表示任务在该小时是否正在进行。最后,我们创建了一个甘特图,该图表使用matplotlib填充了灰色矩形来表示任务持续时间,并使用黑色线段表示订单之间的分界线。 运行此程序后,将生成一张甘特图,用于可视化车间调度问题。

用Python写一个甘特图的代码

很高兴为您提供帮助!下面是一个使用Python绘制甘特图的示例代码: ```python import matplotlib.pyplot as plt import datetime # 任务名称 task_names = ['任务1', '任务2', '任务3', '任务4'] # 任务开始结束时间 task_start_dates = [datetime.datetime(2021, 9, 1, 8, 0), datetime.datetime(2021, 9, 10, 13, 0), datetime.datetime(2021, 9, 20, 12, 0), datetime.datetime(2021, 9, 25, 16, 0)] task_end_dates = [datetime.datetime(2021, 9, 4, 18, 0), datetime.datetime(2021, 9, 13, 8, 0), datetime.datetime(2021, 9, 23, 16, 0), datetime.datetime(2021, 9, 27, 18, 0)] # 设置甘特图的样式 fig, ax = plt.subplots() plt.title("甘特图示例") plt.xlabel("时间") plt.ylabel("任务") plt.grid(True) # 绘制水平条形图 for i in range(len(task_names)): start_date = task_start_dates[i] end_date = task_end_dates[i] duration = end_date - start_date ax.broken_barh([(start_date, duration)], (i, 0.4), facecolors=("tab:blue")) plt.yticks(range(len(task_names)), task_names) # 显示图形 plt.show() ``` 运行这段代码,您将看到一个简单的甘特图,显示了4个任务在时间轴上的开始和结束时间。 如果您想要更多的自定义和控制,可以参考Matplotlib的官方文档,或者查找其他的Python包和库,以满足您的特定需求。

相关推荐

最新推荐

recommend-type

基于51单片机的音乐播放器设计+全部资料+详细文档(高分项目).zip

【资源说明】 基于51单片机的音乐播放器设计+全部资料+详细文档(高分项目).zip基于51单片机的音乐播放器设计+全部资料+详细文档(高分项目).zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
recommend-type

2024xxx市智能静态交通系统运营项目可行性实施方案[104页Word].docx

2024xxx市智能静态交通系统运营项目可行性实施方案[104页Word].docx
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

list根据id查询pid 然后依次获取到所有的子节点数据

可以使用递归的方式来实现根据id查询pid并获取所有子节点数据。具体实现可以参考以下代码: ``` def get_children_nodes(nodes, parent_id): children = [] for node in nodes: if node['pid'] == parent_id: node['children'] = get_children_nodes(nodes, node['id']) children.append(node) return children # 测试数
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。
recommend-type

"互动学习:行动中的多样性与论文攻读经历"

多样性她- 事实上SCI NCES你的时间表ECOLEDO C Tora SC和NCESPOUR l’Ingén学习互动,互动学习以行动为中心的强化学习学会互动,互动学习,以行动为中心的强化学习计算机科学博士论文于2021年9月28日在Villeneuve d'Asq公开支持马修·瑟林评审团主席法布里斯·勒菲弗尔阿维尼翁大学教授论文指导奥利维尔·皮耶昆谷歌研究教授:智囊团论文联合主任菲利普·普雷教授,大学。里尔/CRISTAL/因里亚报告员奥利维耶·西格德索邦大学报告员卢多维奇·德诺耶教授,Facebook /索邦大学审查员越南圣迈IMT Atlantic高级讲师邀请弗洛里安·斯特鲁布博士,Deepmind对于那些及时看到自己错误的人...3谢谢你首先,我要感谢我的两位博士生导师Olivier和Philippe。奥利维尔,"站在巨人的肩膀上"这句话对你来说完全有意义了。从科学上讲,你知道在这篇论文的(许多)错误中,你是我可以依
recommend-type

实现实时监控告警系统:Kafka与Grafana整合

![实现实时监控告警系统:Kafka与Grafana整合](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X2pwZy9BVldpY3ladXVDbEZpY1pLWmw2bUVaWXFUcEdLT1VDdkxRSmQxZXB5R1lxaWNlUjA2c0hFek5Qc3FyRktudFF1VDMxQVl3QTRXV2lhSWFRMEFRc0I1cW1ZOGcvNjQw?x-oss-process=image/format,png) # 1.1 Kafka集群架构 Kafka集群由多个称为代理的服务器组成,这
recommend-type

未定义标识符CFileFind

CFileFind 是MFC(Microsoft Foundation Class)中的一个类,用于在Windows文件系统中搜索文件和目录。如果你在使用CFileFind时出现了“未定义标识符”的错误,可能是因为你没有包含MFC头文件或者没有链接MFC库。你可以检查一下你的代码中是否包含了以下头文件: ```cpp #include <afx.h> ``` 另外,如果你在使用Visual Studio开发,还需要在项目属性中将“使用MFC”设置为“使用MFC的共享DLL”。这样才能正确链接MFC库。