当前位置: 首页 > 知识库问答 >
问题:

使用时间戳绘制gannt图

邵赞
2023-03-14

我试着用plotly绘制一个gannt图。重要的是,水平泳道可以有多个横杆在时间上分开。

我发现了一个使用日历日期(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()

共有1个答案

冯驰
2023-03-14

绘图甘特图仅适用于日期(参见此问题),但一种可能的解决方法是将日期添加到所有时间的开头,然后显示时间,而不在绘图中显示日期。

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()
 类似资料:
  • 我正在使用: 熊猫版本0.23。0 Python版本3.6。5. Seaborn版本0.81。1. 我想要一列时间戳数据的方框图。我的dataframe不是一个时间序列,索引只是一个整数,但我创建了一列时间戳数据,使用: 我过滤掉所有由胁迫产生的NaT值。 在这一点上,我的数据看起来不错,我可以确认EVENT_DM_TS列的类型是Timestamp,没有无效值。 最后,要生成我调用的单变量方框图:

  • 我的目标是使用不同的主键将行从一个Cassandra2.0表移动到另一个表。为了确保数据的一致性,我需要用原始的时间戳插入它们()。我计划使用/复制,或者只使用和从CSV自定义导入。 是否有方法复制带有时间戳的行?在TimeUUID列上不起作用,说明“不正确的复制命令”。 提前谢了。

  • 问题内容: 我有一个格式为(HH:MM:SS.mmmmmm)的时间戳数组和另一个浮点数数组,每个浮点数对应于timestamp数组中的一个值。 我可以使用Matplotlib在x轴上绘制时间,在y轴上绘制数字吗? 我试图这样做,但是不知何故它只接受浮点数数组。如何获得时间图?我必须以任何方式修改格式吗? 问题答案: 你必须首先将时间戳转换为对象(使用)。然后使用将日期转换为格式。 使用以下方式绘制

  • 问题内容: 这是基于@trashgod的有关实时绘图的示例的代码: 运行Java之后,尽管从0开始,但是我仍然不明白为什么图形从40秒开始?遍历代码;找不到任何要在40秒后开始的设置。 另外,如何向后滚动图形以查看以前的数据。 问题答案: 该图在构造传递到的日期的午夜之后的16分40秒处开始。这是在构造函数参数中指定的相同的1000个间隔,每个间隔一秒。在给定的时间设置为午夜的情况下,获取基于零的

  • 如何使用Python绘制时间序列图?因为在数据集中,时间被拆分为年和周期(如M1、M2的月份)。 我正在使用matplotlib,但不知道如何分配时间。 我写的代码来获取数据:导入熊猫作为pd从熊猫导入DataFrame data1=pd.read_csv('CUUR0000SA0.txt',标头=无)data2=pd.read_csv('SUUR0000SA0.txt',标头=无)data=pd

  • 我知道这是一个非常常见的问题,但我觉得我找到的答案并没有真正解决问题。我将概述我的具体用例,并对来自其他SO答案和网络的信息进行总结。 对于我正在编写的服务,数据库条目被创建并存储在移动设备和我们的网站上,需要以两种方式同步。我们目前的目标是Android和iOS,它们都使用sqlite作为关系数据库。服务器端是使用Django和MySQL在Python中实现的,但将来可能会有其他解决方案取代它。