Python 使用日期时间对象

Python 使用日期时间对象,python,datetime,Python,Datetime,下面的第1部分演示了如何使用datetime对象绘制曲线 演示了如何使用浮动来绘制一组线段 第3部分只是混合了第1部分和第2部分,但它失败了。为什么? import datetime import numpy as np import matplotlib.pyplot as plt from matplotlib import collections as mc #----------------Part 1---------------- d0 = datetime.datetime(2

下面的第1部分演示了如何使用datetime对象绘制曲线

演示了如何使用浮动来绘制一组线段

第3部分只是混合了第1部分和第2部分,但它失败了。为什么?

import datetime
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import collections  as mc

#----------------Part 1----------------
d0 = datetime.datetime(2001, 1, 1)
d1 = datetime.datetime(2002, 1, 1)
d2 = datetime.datetime(2003, 1, 1)
d3 = datetime.datetime(2005, 1, 1)
d4 = datetime.datetime(2007, 1, 1)
d5 = datetime.datetime(2009, 1, 1)

date  = [ d0, d1, d2, d3, d4, d5 ]
price = [ 5, 4, 6, 7, 3, 8 ]

plt.plot(date, price)
plt.show()

#----------------Part 2----------------
lines = [ [ (0.5, 1.2), (1.1, 1.3) ],
          [ (2.2, 2.8), (3.1, 4.2) ],
          [ (1.9, 2.9), (0.2, 1.4) ] ]

lc = mc.LineCollection(lines)
fig, ax = plt.subplots()
ax.add_collection(lc)
ax.autoscale()
ax.margins(0.1)
plt.show()

#----------------Part 3----------------
lines = [ [ (d0, 1.2), (d1, 1.3) ],
          [ (d2, 2.8), (d3, 4.2) ],
          [ (d4, 2.9), (d5, 1.4) ] ]

lc = mc.LineCollection(lines)
fig, ax = plt.subplots()
ax.add_collection(lc)
ax.autoscale()
ax.margins(0.1)

plt.show()
更新

线路

lc = mc.LineCollection(lines)
在第3部分中,出现以下错误:

Traceback (most recent call last):
  File "datetime-difficulty.py", line 37, in <module>
    lc = mc.LineCollection(lines)
  File "/lib/python/matplotlib/collections.py", line 897, in __init__
    self.set_segments(segments)
  File "/lib/python/matplotlib/collections.py", line 906, in set_segments
    seg = np.asarray(seg, np.float_)
  File "/lib/python/numpy/core/numeric.py", line 235, in asarray
    return array(a, dtype, copy=False, order=order)
TypeError: float() argument must be a string or a number
回溯(最近一次呼叫最后一次):
文件“datetime.py”,第37行,在
lc=mc.LineCollection(行)
文件“/lib/python/matplotlib/collections.py”,第897行,在__
self.set_段(段)
文件“/lib/python/matplotlib/collections.py”,第906行,以set_段为单位
seg=np.asarray(seg,np.float_u2;)
asarray中的文件“/lib/python/numpy/core/numeric.py”,第235行
返回数组(a,数据类型,copy=False,order=order)
TypeError:float()参数必须是字符串或数字

看起来您正在使用
matplotlib
,因此您需要将日期转换为浮点数,以便绘图正常工作。谢天谢地,
matplotlib
提供了这个函数。通过该函数运行所有日期,
matplotlib
应该能够为您提供一个有意义的x轴(取决于格式化程序/定位器)。

@alfasin更新:“float()参数必须是字符串或数字”这意味着
LineCollection()
接受每个元组中第一个参数为float的行,不是日期对象;)@alfasin我可以计算并传递一些浮点数,但是x标签将毫无意义。建议?但是x标签是没有意义的,将光标移动到图表中的某个点会产生一个没有意义的x坐标。如第1部分所示,matplotlib已经可以很好地处理datetime。@Calaf仅仅因为能够处理datetime,并不意味着它可以在同一轴上将其与非datetime组合。