如何用matplotlib绘制带有时间差的图形
我正在尝试绘制一个图表,X轴是日期时间,Y轴是时间间隔。
def graph_entre_mamadas(tempo_entre_mamadas):
import matplotlib.pyplot as plt
import matplotlib
eixo_x = [i[0] for i in tempo_entre_mamadas]
eixo_y = [i[1] for i in tempo_entre_mamadas]
#print eixo_x
#print eixo_y
plt.plot(eixo_x, eixo_y, 'ro')
plt.gcf().autofmt_xdate()
plt.show()
我的变量eixo_x是一个包含日期时间的列表,而eixo_y变量是一个包含时间间隔的列表。
当我执行这个方法时,我遇到了这个错误:
graph_entre_mamadas(tempo_entre_mamadas_v)
File "consome_mama.py", line 111, in graph_entre_mamadas
plt.plot(eixo_x, eixo_y, 'ro')
File "/usr/lib/pymodules/python2.7/matplotlib/pyplot.py", line 2832, in plot
ret = ax.plot(*args, **kwargs)
File "/usr/lib/pymodules/python2.7/matplotlib/axes.py", line 3997, in plot
self.add_line(line)
File "/usr/lib/pymodules/python2.7/matplotlib/axes.py", line 1507, in add_line
self._update_line_limits(line)
File "/usr/lib/pymodules/python2.7/matplotlib/axes.py", line 1516, in _update_line_limits
path = line.get_path()
File "/usr/lib/pymodules/python2.7/matplotlib/lines.py", line 677, in get_path
self.recache()
File "/usr/lib/pymodules/python2.7/matplotlib/lines.py", line 410, in recache
y = np.asarray(yconv, np.float_)
File "/usr/lib/python2.7/dist-packages/numpy/core/numeric.py", line 320, in asarray
return array(a, dtype, copy=False, order=order)
TypeError: float() argument must be a string or a number
eixo_x : [datetime.datetime(2014, 6, 27, 9, 21, 28), datetime.datetime(2014, 6, 27, 10, 50, 28), datetime.datetime(2014, 6, 27, 13, 26, 28), datetime.datetime(2014, 6, 27, 15, 36, 28), datetime.datetime(2014, 6, 27, 16, 36, 28), datetime.datetime(2014, 6, 27, 17, 23, 28), datetime.datetime(2014, 6, 27, 20, 40, 28), datetime.datetime(2014, 6, 27, 21, 20, 28), datetime.datetime(2014, 6, 27, 22, 11, 28), datetime.datetime(2014, 6, 28, 2, 42, 28)]
eixo_y : [datetime.timedelta(0, 9000), datetime.timedelta(0, 4440), datetime.timedelta(0, 8100), datetime.timedelta(0, 7140), datetime.timedelta(0, 1800), datetime.timedelta(0, 1920), datetime.timedelta(0, 10920), datetime.timedelta(0, 1320), datetime.timedelta(0, 1920), datetime.timedelta(0, 13740)]
我该怎么做呢?
1 个回答
0
Matplotlib没有提供简单的方法来转换时间差。
不过,你可以很容易地使用 matplotlib.dates.date2num
将日期转换为Matplotlib的浮点数表示。
所以,一个可行的解决办法是,先用起始时间加上时间差来创建一个新的日期,然后用 date2num
转换这两个日期,最后计算它们转换后的差值。
下面是一个例子:
import matplotlib
import datetime
x0 = datetime.datetime(2014, 6, 27, 9, 21, 28)
duration = datetime.timedelta(hours=1)
converted_starting_time = matplotlib.dates.date2num(x0)
converted_finish_time = matplotlib.dates.date2num(x0 + duration)
converted_delta = converted_finish_time - converted_starting_time