如果您的x轴上有datetime对象,如何在matplotlib的点击事件处理程序中获取单击哪个对象?
例如,当您执行以下操作时:
def onclick2(event):
print event.x
onClickId = figure.canvas.mpl_connect('button_press_event', OnClick2)
我尝试了event.x、event.xdata和event._x,它们都返回整数
如果您的x轴上有datetime对象,如何在matplotlib的点击事件处理程序中获取单击哪个对象?
例如,当您执行以下操作时:
def onclick2(event):
print event.x
onClickId = figure.canvas.mpl_connect('button_press_event', OnClick2)
我尝试了event.x、event.xdata和event._x,它们都返回整数
他们很可能确实是整数...我相信Matplotlib通过先将日期转换为整数或浮点数来绘制图表。尝试使用Matplotlib dates模块中的num2date
函数与您的事件数据,这可能会得到您想要的结果。
当我尝试从使用matplotlib绘制的pandas时间索引数据帧返回时间戳x轴数据时,遇到了类似的问题。尝试使用Ajean的num2date建议处理event.xdata时,返回的浮点值过大,无法作为日期数值(例如,2014-4-14 2:25 的值为23286385.16)。
为了进一步扩展Ajean的建议,最好先使用matplotlib.dates.date2num
函数将datetime对象转换为numpy.float64。然后,您可以使用这个创建的numpy.float64数组作为matplotlib事件处理程序的x轴。然后,从事件处理程序返回的event.xdata可以使用matplotlib.dates.num2date
函数再次转换回datetime。