首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Matplotlib中绘制“时间”与“日期”

问在Matplotlib中绘制“时间”与“日期”
EN

Stack Overflow用户
提问于 2021-11-18 07:32:17
回答 2查看 63关注 0票数 0

我有一本字典,字典上有日期(年、月、日)和时间戳(小时、分钟、秒),如下所示:

代码语言:javascript
复制
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)]}

我想从中找出一个零碎的地方。首先,我编写了以下代码:

代码语言:javascript
复制
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()

此代码产生了一个错误:

代码语言:javascript
复制
TypeError: float() argument must be a string or a number, not 'datetime.time'

然后,我尝试使用matplotlib.dates转换datetime,将代码更改为:

代码语言:javascript
复制
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()

此代码产生了另一个错误:

代码语言:javascript
复制
ValueError: Could not convert object to NumPy datetime

起初,这个问题看起来真的很简单。但是,现在我不知道如何使用matplotlib来处理它。

我的问题:

  1. 如何使用matplotlib工具处理日期时间对象?
  2. 如何在处理matplotlib中的日期时间对象时正确地设置滴答和滴答?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-11-18 10:37:54

您可以使用熊猫的日期时间功能:

代码语言:javascript
复制
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)

​

​

票数 1
EN

Stack Overflow用户

发布于 2021-11-18 11:00:37

您可以通过与合适的虚拟日期组合,将time对象转换为datetime,然后绘制:

代码语言:javascript
复制
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。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70016015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档