首先,您需要将时间转换为 Pandas 时间戳。 Pandas 时间戳本身并不真正支持时间,它们会附加一个日期,但这很好,因为我们稍后会隐藏该部分。
我们还需要检测日期的变化,我们可以通过查看时间的回绕位置来做到这一点,我们可以通过查看比前一个时间短的时间来找到时间的变化。
我们可以计算累积的换行次数并将该日期数量添加到我们的时间戳中。
让我们定义一个函数来取datetime.time
对象,将它们转换为本地 Pandas 时间戳(使用任意日期 1900-01-01,这是 Pandas 的默认日期)并根据换行调整日期(因此我们最终得到 1900-01-02 的最终时间) ):
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_formatter
与一个DateFormatter
仅包含时间:
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 个刻度,这似乎非常适合该数据集。