我正在尝试实现 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)
如何使 collection
使用 datetime
offsets
?
您的点未被选中的原因是 matplotlib 的内部日期表示与 numpy 的不同。 (Numpy 的 datetime dtype 非常新。Matplotlib 目前需要支持没有 datetime dtype 的 numpy 版本,所以 matplotlib 的内部日期表示还不能被删除。)
您传入的 xdata
会使用 matplotlib.dates.date2num
进行转换。只需将您的 xys
数据转换为相同的表示形式,事情就可以正常进行。 (稍后我会尝试发布一个完整的示例...)
我是一名优秀的程序员,十分优秀!