matplotlib 如何绘制一个时间序列只考虑一天中的时间[重复]

anauzrmj  于 2023-06-30  发布在  其他
关注(0)|答案(1)|浏览(141)

此问题已在此处有答案

Plotting time on the independent axis(5个答案)
5天前关闭。
这篇文章是编辑并提交审查3天前.
我想创建一个散点图的值采取在不同的日子和绘图只根据他们的时间一天。
然而,似乎时间序列只能方便地绘制,包括日期组件。类似的question也被问过,但接受的答案和其他任何答案都没有显示出仅使用日期对象的时间部分**的解决方案。
所以问题是:我如何创建一个散点图,我的数据,只使用时间组件,但删除日期组件的日期时间?
下面的示例可以工作,但不具有所需的输出,因为值是按天和时间绘制的:

# Plotting the data
fig, ax = plt.subplots()
ax.scatter(x = df.Datetime, y = df.Temperature)
ax.xaxis.set_major_formatter(mpl.dates.DateFormatter("%H:%M"))
plt.xticks(rotation = 45)
plt.show()

相反,它只使用时间部分,但不绘图,因为matplotlib不接受datetime.time

# Plotting the data
fig, ax = plt.subplots()
ax.scatter(x = df.Datetime.dt.time, y = df.Temperature)
ax.xaxis.set_major_formatter(mpl.dates.DateFormatter("%H:%M"))
plt.xticks(rotation = 45)
plt.show()

设置

import matplotlib as mpl
import matplotlib.pyplot as plt
import pandas as pd

# creating fake data
# not this is actually read via pd.read_excel from an ods file
x = ['2023-06-12 09:12:00', 
     '2023-06-12 10:15:00', 
     '2023-06-13 09:40:00', 
     '2023-06-13 11:20:00', 
     '2023-06-14 09:36:00', 
     '2023-06-14 10:51:00']
x = [pd.Timestamp.fromisoformat(date) for date in x]
y = [36, 25, 29, 31, 34, 27]
df = pd.DataFrame(data = {'Datetime': x, 'Temperature': y})
avkwfej4

avkwfej41#

一个简单的方法是将所有日期转换为同一天。

x = ['2023-06-12 09:12:00', 
     '2023-06-12 10:15:00', 
     '2023-06-13 09:40:00', 
     '2023-06-13 11:20:00', 
     '2023-06-14 09:36:00', 
     '2023-06-14 10:51:00']

x2 = [f'1970-01-01 {date.split()[-1]}' for date in x] #set all with same day
x3 = [pd.Timestamp.fromisoformat(date) for date in x2]
y = [36, 25, 29, 31, 34, 27]
df = pd.DataFrame(data = {'Datetime': x3, 'Temperature': y})

df现在

Datetime  Temperature
0 1970-01-01 09:12:00           36
1 1970-01-01 10:15:00           25
2 1970-01-01 09:40:00           29
3 1970-01-01 11:20:00           31
4 1970-01-01 09:36:00           34
5 1970-01-01 10:51:00           27

你可以把它画出来

df.plot(kind='scatter', x='Datetime', y='Temperature')
plt.show()

或者,使用您的设置

fig, ax = plt.subplots()
ax.scatter(x = df.Datetime, y = df.Temperature)
ax.xaxis.set_major_formatter(mpl.dates.DateFormatter("%H:%M"))
plt.xticks(rotation = 45)
plt.show()

相关问题