Matplotlib日期在y轴上

7
我试图在matplotlib中绘制一系列日落时间,但出现以下错误:“TypeError:空的'DataFrame':没有数值数据可绘制”。我已经查看了几个转换选项,例如plt.dates.date2num,但这并不能满足我的需求,因为我想以可读格式绘制它,即时间。我找到的所有示例都有x轴上的时间,但没有y轴上的时间。有没有办法完成这个任务?有人有什么想法吗?期待您的回复。最好的问候,Arne。
3 Jan 2013          16:44:00
4 Jan 2013          16:45:00
5 Jan 2013          16:46:00
6 Jan 2013          16:47:00
7 Jan 2013          16:48:00
8 Jan 2013          16:49:00
9 Jan 2013          16:51:00
10 Jan 2013         16:52:00
11 Jan 2013         16:53:00
12 Jan 2013         16:55:00
13 Jan 2013         16:56:00
14 Jan 2013         16:57:00
1个回答

7

从您的问题中并不清楚您是想在x轴上绘制一些未指定的数据,而在y轴上使用日期/时间,还是想在x轴上绘制天数,而在y轴上使用时间。

不过从您的问题中,我假设是后者。

听起来您可能正在使用pandas,但目前我将假设您有两个字符串序列:一个是日期,另一个是时间。

要将给定的轴视为日期,请调用ax.xaxis_date()ax.yaxis_date()。在这种情况下,两者实际上都将是日期。(时间将具有今天作为日期,尽管您不会直接看到它。)

import matplotlib.pyplot as plt
import matplotlib.dates as mdates

date = ['3 Jan 2013', '4 Jan 2013', '5 Jan 2013', '6 Jan 2013', '7 Jan 2013',
        '8 Jan 2013', '9 Jan 2013', '10 Jan 2013', '11 Jan 2013', '12 Jan 2013',
        '13 Jan 2013', '14 Jan 2013']
time = ['16:44:00', '16:45:00', '16:46:00', '16:47:00', '16:48:00', '16:49:00',
        '16:51:00', '16:52:00', '16:53:00', '16:55:00', '16:56:00', '16:57:00']

# Convert to matplotlib's internal date format.
x = mdates.datestr2num(date)
y = mdates.datestr2num(time)

fig, ax = plt.subplots()

ax.plot(x, y, 'ro-')
ax.yaxis_date()
ax.xaxis_date()

# Optional. Just rotates x-ticklabels in this case.
fig.autofmt_xdate()
plt.show()

enter image description here


你说得对,我正在使用pandas,而且这些值实际上是datetime.time()对象,例如datetime.time(8, 27)。因此,mdates.datestr2num对我来说行不通。 - Arne
1
你对datetime.time对象有什么建议吗? - Arne

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接