Using numerical values in plotly for creating Gantt-Charts

不打扰是莪最后的温柔 提交于 2021-01-27 05:33:16

问题


I want to create interactive Gantt-Charts (or a sequence chart) for displaying the scheduling of tasks on multiple processors.

I found the library plotly, which produced very good and interactive Gantt-charts. Unfortunately, plotly-Gantt only works with dates and not numerical values, like I have with the runtime values of the schedule.

Is there a possibility to create Gantt-charts in plotly with numerical values?

Code Example: (I would like to use something like this)

import plotly.figure_factory as ff

df = [dict(Task="Job A on Core 0", Start=0, Finish=10),
      dict(Task="Job B on Core 1", Start=2, Finish=8),
      dict(Task="Job C on Core 0", Start=11, Finish=12)]

fig = ff.create_gantt(df)
fig.show()

回答1:


So I tried to get Plotly's figure_factory function create_gantt to work with numerical values. The only thing that I came up with is a rather dirty work-around that looks like this:

import plotly.figure_factory as ff
from datetime import datetime
import numpy as np

def convert_to_datetime(x):
  return datetime.fromtimestamp(31536000+x*24*3600).strftime("%Y-%d-%m")

df = [dict(Task="Job A", Start=convert_to_datetime(0), Finish=convert_to_datetime(4)),
      dict(Task="Job B", Start=convert_to_datetime(3), Finish=convert_to_datetime(6)),
      dict(Task="Job C", Start=convert_to_datetime(6), Finish=convert_to_datetime(10))]

num_tick_labels = np.linspace(start = 0, stop = 10, num = 11, dtype = int)
date_ticks = [convert_to_datetime(x) for x in num_tick_labels]

fig = ff.create_gantt(df)
fig.layout.xaxis.update({
        'tickvals' : date_ticks,
        'ticktext' : num_tick_labels
        })
fig.write_html('first_figure.html', auto_open=True)

The function convert_to_datetime takes an integer and converts it to datetime string starting at 1971-01-01 for x=0 and increases by one day per increment of x. This function is used to convert all numerical values that you might want to use in your Gantt chart into date strings. Here I just inserted integers from 0 to 10 to showcase that this actually works.

Then for the tick labels the lowest (0) and largest (10) values are used to create evenly distributed tick labels. These integers are then also converted to date strings using list comprehension.

Finally if you execute the whole thing you will get an interactive Gantt chart that looks like this:

I believe this approach can definitely be improved to get a better workflow, but you could use it as a starting point.



来源:https://stackoverflow.com/questions/57686684/using-numerical-values-in-plotly-for-creating-gantt-charts

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!