【问题标题】:Plotting gannt chart using timestamps使用时间戳绘制甘特图
【发布时间】:2020-09-02 23:14:34
【问题描述】:

我正在尝试使用 plotly 绘制甘特图。重要的是水平泳道可以有多个在时间上分开的条。

我找到了一个使用日历日期 (YYYY-MM-DD) 的示例,并尝试使用时间 (HH:MM:SS) 进行转换。但是当我使用时间戳时,所有内容都会聚集在一起,没有间隙。

import plotly.express as px
import pandas as pd

df = pd.DataFrame([
    dict(Start='00:01:12', Finish='00:01:59', Resource="Alex"),
    dict(Start='00:04:51', Finish='00:05:28', Resource="Alex"),
    dict(Start='00:02:12', Finish='00:04:34', Resource="Max")
])

fig = px.timeline(df, x_start="Start", x_end="Finish", y="Resource", color="Resource"
                 )

fig.update_layout(xaxis=dict(
                      title='Timestamp', 
                      tickformat = '%H:%M:%S',
                  ))
fig.show()

【问题讨论】:

    标签: python timestamp plotly data-visualization


    【解决方案1】:

    Plotly 甘特图仅适用于日期(请参阅 this question),但可能的解决方法是将日期 1970-01-01 添加到所有时间的开头,然后显示时间而不在​​绘图中显示日期。

    import plotly.express as px
    import pandas as pd
    
    df = pd.DataFrame([
        dict(Start='1970-01-01 00:01:12', Finish='1970-01-01 00:01:59', Resource="Alex"),
        dict(Start='1970-01-01 00:04:51', Finish='1970-01-01 00:05:28', Resource="Alex"),
        dict(Start='1970-01-01 00:02:12', Finish='1970-01-01 00:04:34', Resource="Max")
    ])
    
    fig = px.timeline(df, x_start="Start", x_end="Finish", y="Resource", color="Resource"
                     )
    
    fig.update_layout(xaxis=dict(
                          title='Timestamp', 
                          tickformat = '%H:%M:%S',
                      ))
    fig.show()
    

    编辑:不幸的是,甘特图在不到 10 秒的时间间隔内中断,我不知道为什么。但是,我很确定在幕后,甘特图只不过是在图表上绘制的矩形,因此我们可以绘制小于 10 秒的间隔来达到类似的效果(除了没有悬停手工绘制的形状)

    import plotly.express as px
    import pandas as pd
    
    df = pd.DataFrame([
        # dict(Start='1970-01-01 00:01:12', Finish='1970-01-01 00:01:19', Resource="Alex"),
        dict(Start='1970-01-01 00:04:51', Finish='1970-01-01 00:05:28', Resource="Alex"),
        dict(Start='1970-01-01 00:02:12', Finish='1970-01-01 00:04:34', Resource="Max")
    ])
    
    fig = px.timeline(df, x_start="Start", x_end="Finish", y="Resource", color="Resource"
                     )
    
    # you can manually set the range as well
    fig.update_layout(xaxis=dict(
                          title='Timestamp', 
                          tickformat = '%H:%M:%S',
                          range = ['1970-01-01 00:01:00','1970-01-01 00:06:00']
                      ))
    
    # add a filled rectangle
    fig.add_shape(
                type="rect",
                x0='1970-01-01 00:01:12',
                y0=0.6,
                x1='1970-01-01 00:01:19',
                y1=1.4,
                line=dict(color="rgb(98,115,241)"),
                fillcolor="rgb(98,115,241)",
            )
    
    fig.show()
    

    【讨论】:

    • 谢谢!尽管我很喜欢 Plotly 的交互性,但我已经习惯于寻找解决方法:)
    • 小问题@Derek O:如果一个时间范围共享相同的 10s 值,它就会中断。例如将第一个完成更改为'1970-01-01 00:01:19'
    • 嗯,这真的很奇怪。让我看看我是否能弄清楚导致甘特图损坏的原因
    • 据我所知,没有很好的解决方案。如果需要添加小于 10 秒的间隔,可以使用fig.add_shape 方法并创建一个矩形。我会更新我的答案,以展示你如何去做这件事。您还需要确保颜色匹配
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-25
    • 2015-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-11
    相关资源
    最近更新 更多