我有一本字典,字典上有日期(年、月、日)和时间戳(小时、分钟、秒),如下所示:
dict = {datetime.date(2021, 11, 1): [datetime.time(7, 43, 23)],
datetime.date(2021, 11, 8): [datetime.time(6, 4, 45),
datetime.time(6, 3, 36),
datetime.time(5, 56, 26)],
datetime.date(2021, 11, 12): [datetime.time(8, 5, 11),
datetime.time(5, 44, 45),
datetime.time(5, 24, 14),
datetime.time(4, 56, 5)]}我想从中找出一个零碎的地方。首先,我编写了以下代码:
from matplotlib import pyplot as plt
for key, value in dict.items():
x = [key]*len(value)
y = value
plt.scatter(x, y)
plt.tight_layout()
plt.show()此代码产生了一个错误:
TypeError: float() argument must be a string or a number, not 'datetime.time'然后,我尝试使用matplotlib.dates转换datetime,将代码更改为:
from matplotlib import pyplot as plt
import matplotlib.dates as mdates
for key, value in dict.items():
x = [mdates.date2num(key)]*len(value)
y = [mdates.date2num(y) for y in value]
plt.scatter(x, y)
plt.tight_layout()
plt.show()此代码产生了另一个错误:
ValueError: Could not convert object to NumPy datetime起初,这个问题看起来真的很简单。但是,现在我不知道如何使用matplotlib来处理它。
我的问题:
发布于 2021-11-18 10:37:54
您可以使用熊猫的日期时间功能:
import pandas as pd
arr = []
for key, value in dict.items():
for time in value:
arr.append([key, time])
df = pd.DataFrame(arr, columns=['day', 'time'])
df.day = pd.to_datetime(df.day)
df.time = pd.to_datetime(df.time.astype('str'))
plt.scatter(df.day, df.time)

发布于 2021-11-18 11:00:37
您可以通过与合适的虚拟日期组合,将time对象转换为datetime,然后绘制:
from datetime import date
from datetime import datetime
value = [datetime.combine(date.today(), value) for v in value]
scatter(x, value)matplotlib不为您这样做,因为它无法知道您想要的开始日期是什么。
如果不希望日期出现在y轴中,则设置日期格式化程序:https://matplotlib.org/stable/api/dates_api.html。
https://stackoverflow.com/questions/70016015
复制相似问题