【问题标题】:Pandas time plot without date没有日期的熊猫时间图
【发布时间】:2022-01-04 03:03:13
【问题描述】:

我整天都在努力,但无法弄清楚这一点。也许很简单,但我不能得到这个。有一个类似的问题 (here),但它并没有解决问题。

基本上,我试图用时间绘制数据,但没有日期信息。请参阅下面的代码,这给了我一个错误。

import pandas as pd
import matplotlib.pyplot as plt

data = {'date_time': ['2022-01-03, 08:56:23', '2022-01-03, 09:12:39', '2022-01-04, 09:39:49', '2022-01-04, 09:45:19'],
        'value': [1200, 150, -300, 450]
        }

df = pd.DataFrame(data)

time = pd.to_datetime(df['date_time']).dt.time
value = df['value']

print(time)

plt.plot(time, value,'o--', lw=0);
plt.show()

我希望仅根据时间绘制价值,而没有日期信息。因此,理想情况下,它应该如下所示。

下面不是这样的。

【问题讨论】:

    标签: python pandas matplotlib


    【解决方案1】:

    将 date_time 强制转换为 datetime 并使用 strftime 和绘图提取时间分量

    df['time']=pd.to_datetime(df['date_time']).dt.strftime('%H:%M:%S')
    plt.plot(df['time'], df['value'],'o--', lw=0);
    plt.show()
    

    如果您想要四舍五入的时间,请参阅下面的代码。

    df['time']=pd.to_datetime(df['date_time']).round('T').dt.strftime('%H:%M:%S')
    
    
    plt.plot(df['time'], df['value'],'o--', lw=0);
    plt.show()
    

    【讨论】:

    • 您输入错误。当您有字符串类型值时,matplot 将每个值绘制为一个 tick 。 timeseries 为此而臭名昭著。在后台,matplotlib 设置为采用格式正确的日期时间。以下帖子在某种程度上讨论了这一点stackoverflow.com/questions/13515471/…
    • 从@Manlai 的回答中,您可以看到他已经从日期时间创建了字符串并避免使用日期时间字符串。如果他必须使用日期时间字符串,则它必须是实际格式正确的日期时间字符串。如果有帮助
    【解决方案2】:

    如果您只想更改刻度标签,则此答案是。基本上,使用set_xticklabels 将 xticklabels 从默认更改为每小时:

    f, ax = plt.subplots(1,1)
    ax.plot(df['date_time'], df['value'],'o--', lw=0)
    ax.set_xticks(df['date_time'])
    ax.set_xticklabels(df['date_time'].str.split(',').str[1]);
    

    输出:

    【讨论】:

      猜你喜欢
      • 2019-07-19
      • 2015-02-12
      • 2016-07-05
      • 2022-10-12
      • 2017-02-23
      • 1970-01-01
      • 2016-11-09
      • 2018-06-29
      • 1970-01-01
      相关资源
      最近更新 更多