python - 绘制一天内具有不同时间戳和 datetime.time 格式的时间序列

标签 python pandas matplotlib seaborn

我有两个包含温度和光传感器读数的数据集。测量时间为 22:35:41 - 04:49:41。

此数据集的问题在于,当从一天到另一天(22:35:41 - 04:49:41)进行测量时,要根据 datetime.date 格式绘制测量值。绘图功能自动从 00:00 开始,并将 00:00 之前测量的数据放在绘图末尾。

import numpy as np 
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

Temperature = pd.read_excel("/kaggle/input/Temperature_measurement.xlsx")
Light = pd.read_excel("/kaggle/input/Light_measurement.xlsx")

sns.lineplot(x="Time",y="Light", data = Light)
sns.lineplot(y="Temperature", x="Time", data = Temperature)
plt.show()

plotted data

This is a link to the dataset

Here is a link to the Jupyter Notebook

最佳答案

首先,您需要将时间转换为 Pandas 时间戳。 Pandas 时间戳本身并不真正支持时间,它们会附加一个日期,但这很好,因为我们稍后会隐藏该部分。

我们还需要检测日期的变化,我们可以通过查看时间的回绕位置来实现这一点,我们可以通过查看比前一个时间更短的时间来找到时间变化。

我们可以计算累积的换行次数,并将该日期数量添加到我们的时间戳中。

让我们定义一个函数来获取 datetime.time 对象,将它们转换为本地 Pandas 时间戳(使用任意日期 1900-01-01,这是 Pandas 的默认值)并调整根据实际情况,我们最终的时间是 1900 年 1 月 2 日:

def normalize_time(series):
    series = pd.to_datetime(series, format="%H:%M:%S")
    series += pd.to_timedelta(series.lt(series.shift()).cumsum(), unit="D")
    return series

现在让我们将其应用到我们的 DataFrame 中:

Light["Time"] = normalize_time(Light["Time"])
Temperature["Time"] = normalize_time(Temperature["Time"])

现在绘制数据看起来是正确的,而且时间是连续的。除了 X 刻度的标签会尝试显示日期,这并不是我们真正关心的,所以让我们现在修复该部分。

我们可以将 Matplotlib 的 set_major_formatterDateFormatter 一起使用来仅包含时间:

import matplotlib.dates

ax = plt.subplot()

sns.lineplot(x="Time", y="Light", data=Light)
sns.lineplot(x="Time", y="Temperature", data=Temperature)

ax.xaxis.set_major_formatter(
    matplotlib.dates.DateFormatter("%H:%M")
)

plt.show()

这每小时产生 X 个刻度,这似乎非常适合该数据集。

Plotted Chart

关于python - 绘制一天内具有不同时间戳和 datetime.time 格式的时间序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60318410/

相关文章:

python - 如何继承异常来创建更具体的错误?

python - 多核 Python : multiprocessing Vs. zeroMQ?

python - 将当前列名称更改为行并替换为其他列名称

python - 在 python 中绘制图表 - LineCollection

python - 使用 Matplotlib 绘制时间戳(小时/分钟/秒)

python - 使用列表列表进行 Numpy 索引

python - Pandas:使用列值的随机采样替换 NaN

Python:如何在groupby之后适本地加入回df

python - XLDateAmbiguous 解决方法

python - PyQt4,matplotlib,修改现有绘图的轴标签