我正在尝试实施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
一起使用?
答案 0 :(得分:1)
您的积分未被选中的原因是matplotlib的内部日期表示与numpy的不同。 (Numpy的datetime dtype非常新.Matplotlib目前需要支持没有datetime dtype的numpy版本,因此matplotlib的内部日期表示不能被删除。)
您传入的xdata
将使用matplotlib.dates.date2num
进行转换。只需将您的xys
数据转换为相同的表示形式即可。 (我会尝试发布一个完整的例子......)