我有一个HH:MM:SS格式的时间戳列表,我想用datetime.time来绘制一些值。看起来python不喜欢我这样做。有人能帮忙吗?
import datetime
import matplotlib.pyplot as plt
# random data
x = [datetime.time(12,10,10), datetime.time(12, 11, 10)]
y = [1,5]
# plot
plt.plot(x,y)
plt.show()
*TypeError: float() argument must be a string or a number*
3条答案
按热度按时间tvokkenx1#
好吧,一个两步走的故事,让他们情节真的很好
步骤1:将数据准备成适当的格式
从
datetime
到matplotlib
的日期/时间约定兼容**float
**和往常一样,鬼子的是隐藏在细节里的。
matplotlib
日期几乎相等,但不相等:因此,强烈建议重复使用自己的工具:
第2步:管理轴标签、格式和比例(最小/最大),作为下一个问题
matplotlib
也为您带来了这部分的手臂。检查code in this answer for all details
z6psavjg2#
这在Python 3.5.3和Matplotlib 2.1.0中仍然是有效的问题。
解决方法是使用
datetime.datetime
对象而不是datetime.time
对象:默认情况下,日期部分应不可见。否则,您始终可以使用DateFormatter:
wj8zmpe13#
我有一个Pandas DataFrame
df
,它包含一个datetime
列df.dtm
和一个数据列df.x
,跨越了几天,但是我想使用matplotlib.pyplot
作为时间的函数来绘制它们,而不是 * 日期和时间(datetime,datetimeindex)。也就是说,我希望所有数据点在绘图中折叠到相同的24h范围内。我可以毫无问题地绘制df.x
与df.dtm
,但我刚刚花了两个小时来尝试如何将df.dtm
转换为df.time
(包含一天中的时间,但不包含日期),然后将其绘制出来。(对我来说)这个简单的解决方案不起作用:这确实有效:
请注意,区别在于前两行,第一行可以让Pandas和Matplotlib更好地协作,第二行似乎多余(甚至是错误的),但这对我的例子来说并不重要,因为我使用的是单一时区,并且没有绘制。