【问题标题】:Plot datetime data in 24 hour window on x axis在 x 轴的 24 小时窗口中绘制日期时间数据
【发布时间】:2022-11-05 02:26:13
【问题描述】:

我有一个包含日期时间数据的数据框:

  • Start_time: eg(2013-09-21 00:14:00) - 任务开始的时间戳
  • End_time: eg(2013-09-22 11:04:00) - 任务结束的时间戳
  • Time_diff:eg(0 days 06:07:00) - 任务花费的时间。

我想绘制时间事件开始和结束的直方图,而不考虑日期(所以只有 24 时钟)。

我曾尝试使用:

df['Start_time'].dt.time

只是得到时间和情节。 但是,之后我无法将时间戳(现在是对象)放入 20 个容器中。

这是我到目前为止的结果:

这就是我想要得到的,x 轴上 24 小时的图,以及 y 的开始时间和结束时间的分箱分布

这是代码

from random import randrange
import datetime
import pandas as pd 
import plotly.express as px

 # make the EXAMPLE dataset 
startDate = datetime.datetime(2013, 9, 20,13,00)
start_lst = [] 
end_lst = []
for i in range(200):

  start_time= startDate + datetime.timedelta(hours=randrange(23), minutes= randrange(60))
  end_time  = start_time + datetime.timedelta(hours=randrange(2,7), minutes= randrange(60))
  startDate = startDate + datetime.timedelta(days=randrange(4))
  start_lst.append(start_time)
  end_lst.append(end_time)

df = pd.DataFrame({'Start_time': start_lst, 
                   'End_time':  end_lst 
                   })
df['Time_diff'] = df['End_time']-df['Start_time']


 #start of code
 #tried just using histogram, but sicne the date changes, it wont plot over 24hours
fig = px.histogram(df, x=['Start_time', 'End_time'], nbins=20)
fig.show()
 #so tried removing the date part, and just leaving time, however now it wont properly bin
df['Start_time_nodate'] = df['Start_time'].dt.time
df['End_time_nodate']   = df['End_time'].dt.time
   
fig = px.histogram(df, x=['Start_time_nodate', 'End_time_nodate'], nbins=20)
fig.show()

【问题讨论】:

    标签: python pandas datetime time


    【解决方案1】:

    如果我理解正确,使用您的示例数据框,这是使用Matplotlib 的一种方法:

    from matplotlib import pyplot as plt
    
    # Setup
    df["Start_time_nodate"] = df["Start_time"].dt.hour
    df["End_time_nodate"] = df["End_time"].dt.hour
    fig, ax = plt.subplots(figsize=(8, 4))
    
    # Plot frequencies
    ax.plot(df["Start_time_nodate"].value_counts(sort=False).sort_index())
    ax.plot(df["End_time_nodate"].value_counts(sort=False).sort_index())
    
    # Style plot
    ax.legend(["Start time", "End time"])
    ax.set_xticks(ticks=[i for i in range(0, 25)])
    ax.set_xticklabels([i for i in range(0, 25)])
    plt.xlabel("24 hours")
    plt.ylabel("Frequency")
    ax.margins(x=0)
    

    在 Jupyter 笔记本中,此代码输出以下图像:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-29
      • 1970-01-01
      • 1970-01-01
      • 2020-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多