2013-11-26 2 views
2

Я пытаюсь реализовать this lasso selection, но я получаю:Как выбрать точки с фидатами datetime в Matplotlib?

... 
    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 

Это, вероятно, из-за моих-точек х-координаты типа 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 работу с datetimeoffsets ?

ответ

1

Причина, по которой ваши очки не выбраны, заключается в том, что внутреннее представление даты matplotlib не совпадает с количеством numpy. (DateTime DTYPE Numpy является очень новым. Matplotlib в настоящее время необходимо поддерживать Numpy версии, которые не имеют DATETIME DTYPE, поэтому внутреннее представление даты Matplotlib не может быть отброшено еще.)

xdata, что вы передаете в получает преобразован с использованием matplotlib.dates.date2num. Просто преобразуйте данные xys в одно и то же представление, и все должно работать. (Я попытаюсь опубликовать полный пример в немного ...)

+0

спасибо, это работает. – Yariv