Skip to main content
 首页 » 编程设计

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

2025年05月04日6bhlsheji

我正在尝试实现 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 总是返回 Falses:

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 数据转换为相同的表示形式,事情就可以正常进行。 (稍后我会尝试发布一个完整的示例...)