Python 机器调度的甘特图

Python 机器调度的甘特图,python,matplotlib,job-scheduling,gantt-chart,Python,Matplotlib,Job Scheduling,Gantt Chart,我在用python从数据集中绘制甘特图时遇到了一些麻烦。我有一套机器,在一段时间内处理不同的任务。我想制作一个甘特图,通过y轴显示机器,x轴显示每个任务花费的时间。 每台机器应该只在y轴上出现一次,以便更容易地看到我希望每个任务具有相同颜色的任务 这个想法是检查一些奇怪的事情,比如两台或多台机器同时处理同一个任务 让我用一个小例子来说明我拥有的数据集: machine equipment start finish m1 e2 date1 date

我在用python从数据集中绘制甘特图时遇到了一些麻烦。我有一套机器,在一段时间内处理不同的任务。我想制作一个甘特图,通过y轴显示机器,x轴显示每个任务花费的时间。 每台机器应该只在y轴上出现一次,以便更容易地看到我希望每个任务具有相同颜色的任务

这个想法是检查一些奇怪的事情,比如两台或多台机器同时处理同一个任务

让我用一个小例子来说明我拥有的数据集:

machine   equipment   start   finish
  m1         e2       date1    date2
  m2         e2       date3    date4
  m1         e1       date5    date6
  m3         e3       date7    date8
  m3         e4       date9    date10
我尝试使用from matplotlib,但无法找到有效地为绘图添加数据的方法。因为我有100台机器和400个任务

以显示输出的外观

当前代码如下:

import datetime as dt

machines = set(list(mydata["machine"]))
tasks = set(list(mydata["task"]))

fig, ax = plt.subplots(figsize=(20, 10))

yrange = 5 # y width of gantt bar
ymin = 0
orign = min(list(mydata["start"])) # time origin

for i in machines:

    stdur = [] # list of tuples (start, duration)
    ymin = index*6 # start y of gantt bar

    for index, row in mydata.iterrows():

        if row["machine"] == i:
            start = (row["start"] -  orign).total_seconds()/3600
            duration = (row["finish"] -  row["start"]).total_seconds()/3600

            stdur.append((start,duration))

    ax.broken_barh(stdur,(ymin,yrange))

ax.set_xlabel('Time')
ax.set_yticklabels(machines)

plt.show()
塞梅茨

如果您可以将整个数据传递给客户机,并让JS甘特完成它的工作,那么RadiantQ jQuery甘特包将是一个更好的选择。以下是类似内容的在线演示:

这就是它的样子:

有关产品的更多信息,请点击此处: Seimetz

如果您可以将整个数据传递给客户机,并让JS甘特完成它的工作,那么RadiantQ jQuery甘特包将是一个更好的选择。以下是类似内容的在线演示:

这就是它的样子:

有关产品的更多信息,请点击此处:

你所说的效率是什么意思?100*400的计算效率并不高。实际上,数据集大约有2000行。我一直天真地循环所有这些来整合不同机器和任务的列表,这需要很长时间。听起来仍然可行。我认为如果你不展示你的代码/提供更多的信息(例如,预处理或最终的plt.plot()调用),就没有什么帮助了。这一点很好。我来编辑这个问题你说的效率是什么意思?100*400的计算效率并不高。实际上,数据集大约有2000行。我一直天真地循环所有这些来整合不同机器和任务的列表,这需要很长时间。听起来仍然可行。我认为如果你不展示你的代码/提供更多的信息(例如,预处理或最终的plt.plot()调用),就没有什么帮助了。这一点很好。我将编辑这个问题