如何在时间h1:m1和h2:m2之间用x_lims绘制图形

2024-09-29 23:23:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我在做一个有大量温度数据的项目,我正在处理和绘制我所有的数据。然而,当我试图在时间1(9:00)和时间2(21:00)之间设置赛程限制时,我总是犯规

数据背景:

传感器已经连续两周每秒收集一次数据,我已经将主数据文件分割成更小的每日文件(例如dayX)。每天包含一个时间戳(column='timestamp')和一个平均温度(column='means')

每天的数据已经在我想要绘制的窗口上稍微预许可了(即dayX包含8:55:00-21:05:00的数据)。数据集在某些点包含NaN值,因为传感器没有磨损,需要丢弃数据

目标:

我想做的是能够在一个设定的时间间隔(xulim=9:00-21:00)之间绘制dayX数据。由于我有很多天的数据,我最终想用相同的x轴绘制每一天(我希望它们作为单独的图形,而不是子图),但是每一天在主数据集中有不同的间隔,所以我想设置恒定的x lims。由于我有许多不同的数据日,我宁愿不必指定日期和时间

示例数据:

dayX = 
    timeStamp              meanT
    2018-05-10 08:55:00    NaN
             .              .
             .              .
             .              .
    2018-05-10 18:20:00    32.4
             .              .
             .              . 
             .              . 
    2018-05-10 21:05:00    32.0

我尝试过的:

    import pandas as pd
    import numpy as np
    import datetime as dt
    import matplotlib.pyplot as plt
    from matplotlib.dates import date2num, DateFormatter

    dayX = pd.read_csv('path/to/file/dayX.csv)
    dayX['timeStamp'] = pd.to_datetime(dayX['timeStamp'], format=%Y %m %d %H:%M:%S.%f')

    fig, ax1 = plt.subplots(1,1)
    ax1.plot(dayX['timeStamp'], dayX['meanT'])
    ax1.xaxis.set_major_formatter(DateFormatter('%H:%M'))
    ax1.set_xlim(pd.Timestamp('9:00'), pd.Timestamp('21:00'))
    fig.autofmt_xdate()

    plt.show()

它给出:

empty figure

但是,如果我删除了限制线,数据绘图就可以了,但是限制是自动选择的

    # Get rid of this line:
    ax1.set_xlim(pd.Timestamp('9:00'), pd.Timestamp('21:00'))
    # Get this:

full figure, wrong boundaries

我真的不知道为什么会出问题,或者我还应该尝试什么


Tags: 数据importas时间绘制columnplt传感器
2条回答

您可能需要构造一个完整的timestamp对象,因为它默认为今天的日期,在您的示例中没有数据。下面的代码片段应该替换代码中的ax1.set_xlim行,并且还应该适用于在您选择的特定时间开始和结束多天时间范围

min_h = 9 # hours
max_h = 21 # hours

start = dayX['timeStamp'].min()
end = dayX['timeStamp'].max()

xmin = pd.Timestamp(year=start.year, month=start.month, day=start.day, hour=min_h)
xmax = pd.Timestamp(year=end.year, month=end.month, day=end.day, hour=max_h)

ax1.set_xlim(xmin, xmax)

你的timeStamp是一个datetime对象。您所要做的就是传递datetime对象作为限制

import pandas as pd
import numpy as np
import datetime as dt
import matplotlib.pyplot as plt
from matplotlib.dates import date2num, DateFormatter

dayX = df
dayX['timeStamp'] = pd.to_datetime(dayX['timeStamp'], format='%Y-%m-%d %H:%M:%S')

fig, ax1 = plt.subplots(1,1)
ax1.plot(dayX['timeStamp'], dayX['meanT'])
ax1.xaxis.set_major_formatter(DateFormatter('%H:%M'))
ax1.set_xlim(df['timeStamp'].min().replace(hour=9), df['timeStamp'].min().replace(hour=21))
fig.autofmt_xdate()

plt.show()

输出:

enter image description here

相关问题 更多 >

    热门问题