如何在Matplotlib中选择具有日期时间坐标的点?

时间:2013-11-26 16:46:18

标签: python datetime python-2.7 matplotlib floating-point

我正在尝试实施this lasso selection,但我得到了:

  ...
  File "C:\Python27\lib\site-packages\matplotlib\axes.py", line 1481, in add_collection
    self.update_datalim(collection.get_datalim(self.transData))
  File "C:\Python27\lib\site-packages\matplotlib\collections.py", line 185, in get_datalim
    offsets = np.asanyarray(offsets, np.float_)
  File "C:\Python27\lib\site-packages\numpy\core\numeric.py", line 372, in asanyarray
    return array(a, dtype, copy=False, order=order, subok=True)
  TypeError: float() argument must be a string or a number

这可能是因为我的数据点的x坐标属于datetime.datetime类型。

我试过了:

xdata = xdata.astype('datetime64[us]').astype('float')

这消除了TypeError,但随后点永远不会被选中,即contains_points总是返回False s:

p = path.Path(verts)
ind = p.contains_points(self.xys)

如何使collectiondatetime offsets一起使用?

1 个答案:

答案 0 :(得分:1)

您的积分未被选中的原因是matplotlib的内部日期表示与numpy的不同。 (Numpy的datetime dtype非常新.Matplotlib目前需要支持没有datetime dtype的numpy版本,因此matplotlib的内部日期表示不能被删除。)

您传入的xdata将使用matplotlib.dates.date2num进行转换。只需将您的xys数据转换为相同的表示形式即可。 (我会尝试发布一个完整的例子......)