【问题标题】:Adjust timestamps on x-axis - Matplotlib调整 x 轴上的时间戳 - Matplotlib
【发布时间】:2019-07-25 08:17:00
【问题描述】:

我正在尝试按照time 的顺序创建一个line plot。对于下面的df,第一个值出现在07:00:00 并在00:00:40 结束。

但是timestamps 没有分配给x-axisrowmidnight 之后是plotted,而不是最后一个。

import pandas as pd
import matplotlib.pyplot as plt

d = ({
    'Time' : ['7:00:00','10:30:00','12:40:00','16:25:00','18:30:00','22:40:00','00:40:00'],
    'Value' : [1,2,3,4,5,4,10],           
     })

df = pd.DataFrame(d)

df['Time'] = pd.to_timedelta(df['Time'])

plt.plot(df['Time'], df['Value'])

plt.show()

print(df)

【问题讨论】:

    标签: python pandas matplotlib plot time


    【解决方案1】:

    您的 timedelta 对象正在被 matplotlib 转换为数字表示。这就是为什么您没有在 x 轴上获得日期的原因。并且剧情正在有序进行。只是'00:40:00' 比其他所有时间都少,所以它被绘制为最左边的点。

    您可以改为使用日期时间格式来包含天数,这表明00:40:00 应该排在最后,因为它将在第二天。您还可以使用 pandas 绘图方法来更轻松地格式化:

    d = ({
        'Time' : ['2019/1/1 7:00:00','2019/1/1 10:30:00','2019/1/1 12:40:00',
                  '2019/1/1 16:25:00','2019/1/1 18:30:00','2019/1/1 22:40:00',
                  '2019/1/2 00:40:00'],
        'Value' : [1,2,3,4,5,4,10],           
    })
    
    df = pd.DataFrame(d)
    df['Time'] = pd.to_datetime(df['Time'])
    
    df.plot(x='Time', y='Value')
    


    更新

    在您的时间点设置刻度/刻度标签有点棘手。这个post 将让您了解定位的工作原理。基本上,您需要使用 matplotlib.dates.date2num 之类的东西来获取日期时间的数字表示:

    xticks = [matplotlib.dates.date2num(x) for x in df['Time']]
    xticklabels = [x.strftime('%H:%M') for x in df['Time']]
    
    ax.set_xticks(xticks)
    ax.set_xticklabels(xticklabels)
    

    【讨论】:

    • 这很好@busybear。但我真的很想在没有date-timex-axisplot timestamps。是否可以仅将 x 轴显示为 07:00:00 - 00:00:40
    • 我用相关信息更新了我的帖子来做到这一点。
    • 传奇。谢谢你
    • 感谢上帝。我已经找了好几个小时了!有点不相关,但是在尝试在坐标系之间进行转换时,我遇到了各种奇怪的错误。这一切都归结为:matplotlib 不喜欢 x 轴上的 pandas 'timestamp' datetype,所以转换器失败了。一个简单的 matplotlib.dates.date2num() 事先解决了一切。
    猜你喜欢
    • 2019-06-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-02
    • 1970-01-01
    • 2019-07-24
    • 1970-01-01
    • 1970-01-01
    • 2020-08-31
    相关资源
    最近更新 更多