python绘制流水线调度问题甘特图
时间: 2023-10-14 13:18:46 浏览: 104
要绘制流水线调度问题的甘特图,我们可以使用Python中的matplotlib库来实现。以下是一个简单的示例代码:
```python
import matplotlib.pyplot as plt
import matplotlib.patches as patches
# 定义任务名称和对应的开始时间和结束时间
tasks = {'task1': (0, 2), 'task2': (2, 4), 'task3': (4, 6), 'task4': (6, 8)}
# 定义甘特图的参数
fig, ax = plt.subplots()
ax.set_xlabel('Time')
ax.set_ylabel('Task')
ax.set_yticks([1])
ax.set_yticklabels(['Pipeline'])
# 绘制甘特图中的任务条
for task, (start, end) in tasks.items():
ax.add_patch(patches.Rectangle((start, 0.5), end-start, 0.5, color='blue'))
ax.annotate(task, xy=(start+(end-start)/2, 0.75), ha='center', va='center')
# 显示甘特图
plt.show()
```
这段代码将绘制一个包含四个任务的甘特图,每个任务都以蓝色矩形表示,其中x轴表示时间,y轴表示流水线。你可以根据自己的数据进行修改和完善。
相关问题
python如何画车辆调度的甘特图,可以举例子并作图吗
当涉及到车辆调度的甘特图时,通常需要考虑车辆的起始时间、结束时间以及它们之间的依赖关系。下面是一个示例代码,演示如何使用`plotly`库绘制车辆调度的甘特图:
```python
import plotly.figure_factory as ff
# 创建车辆调度数据
data = [
dict(Task="任务1", Vehicle="车辆1", Start='2022-01-01', Finish='2022-01-10'),
dict(Task="任务2", Vehicle="车辆2", Start='2022-01-05', Finish='2022-01-15'),
dict(Task="任务3", Vehicle="车辆1", Start='2022-01-10', Finish='2022-01-20'),
dict(Task="任务4", Vehicle="车辆3", Start='2022-01-12', Finish='2022-01-25')
]
# 绘制车辆调度甘特图
fig = ff.create_gantt(data, colors=['#7a0504', '#d6604d', '#ffa07a'], index_col='Vehicle', show_colorbar=True)
fig.show()
```
在这个示例中,我们使用`plotly.figure_factory`库的`create_gantt()`函数创建一个车辆调度的甘特图对象。我们提供了任务的起始时间、结束时间以及所属的车辆,通过设置`index_col`参数为`Vehicle`来按车辆进行分组。我们还可以为不同的车辆指定不同的颜色。
你可以根据自己的实际情况,修改任务和车辆的起始时间、结束时间,并添加更多的任务和车辆。希望这个示例能够帮助你绘制车辆调度的甘特图!
给我一个多工厂多机器的流水车间调度绘制的甘特图的python代码,并且对甘特图进行美化,并将甘特图中的矩形改为圆角矩形
以下是一个基于 Python 的多工厂多机器的流水车间调度绘制甘特图的示例代码:
```python
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
# 定义车间数量
num_workshops = 2
# 定义机器数量
num_machines = 4
# 定义工序数量
num_operations = 6
# 生成随机数据
data = np.random.randint(1, 20, size=(num_operations, num_machines, num_workshops))
# 格式化数据为 DataFrame
df = pd.DataFrame(data.reshape(num_operations, -1), columns=[f"Workshop {i}, Machine {j}" for i in range(1, num_workshops+1) for j in range(1, num_machines+1)])
# 定义甘特图颜色
colors = plt.get_cmap("Set1")(np.linspace(0, 1, num_operations))
# 定义甘特图标题
plt.title("Multi-Factory Multi-Machine Flow Shop Scheduling Gantt Chart")
# 绘制甘特图
for i, row in df.iterrows():
plt.barh(y=i, width=row, left=df.iloc[:i].sum(), color=colors[i], height=0.8, alpha=0.8, edgecolor="black", linewidth=0.5)
# 设置 Y 轴标签
plt.yticks(df.index, [f"Operation {i+1}" for i in range(num_operations)])
# 设置 X 轴标签
plt.xlabel("Time (hours)")
# 设置图例
plt.legend([f"Workshop {i}, Machine {j}" for i in range(1, num_workshops+1) for j in range(1, num_machines+1)], loc="upper right")
# 美化甘特图
plt.rcParams["font.family"] = "Arial"
plt.rcParams["font.size"] = 12
plt.grid(axis="x", color="white", linestyle="-", linewidth=0.5)
plt.box(False)
for spine in plt.gca().spines.values():
spine.set_visible(False)
plt.tick_params(axis="both", which="both", length=0)
# 将矩形改为圆角矩形
for patch in plt.gca().patches:
patch.set_edgecolor("black")
if isinstance(patch.get_facecolor(), tuple):
patch.set_facecolor(patch.get_facecolor()[:3] + (0.8,))
patch.set_linewidth(0.5)
patch.set_joinstyle("round")
patch.set_capstyle("round")
# 显示甘特图
plt.show()
```
这段代码会生成一个多工厂多机器的流水车间调度绘制的甘特图,并对甘特图进行美化,并将甘特图中的矩形改为圆角矩形。你可以根据需要修改变量的值以生成不同的甘特图。
阅读全文