【发布时间】:2019-01-04 17:38:17
【问题描述】:
在绘制pandas.Timeseries 时使用matplotlib event.xdata 时遇到问题,我试图重现very related question 中提出的答案,但得到了一个非常奇怪的行为。
这是代码,适用于 python3 并在 on_click() 函数中添加了一些内容:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
def on_click(event):
if event.inaxes is not None:
# provide raw and converted x data
print(f"{event.xdata} --> {mdates.num2date(event.xdata)}")
# add a vertical line at clicked location
line = ax.axvline(x=event.xdata)
plt.draw()
t = pd.date_range('2015-11-01', '2016-01-06', freq='H')
y = np.random.normal(0, 1, t.size).cumsum()
df = pd.DataFrame({'Y':y}, index=t)
fig, ax = plt.subplots()
line = None
df.plot(ax=ax)
fig.canvas.mpl_connect('button_press_event', on_click)
plt.show()
如果我启动它,我会得到下图,预计日期范围在 2015 年 11 月到 2016 年 1 月之间,窗口页脚中提供的光标位置信息也是如此(此处为 2015-11-01 10:00 ),以及垂直线的正确位置:
但是,命令行输出如下:
C:\Users\me\Documents\code\>python matplotlib_even.xdate_num2date.py
402189.6454115977 --> 1102-02-27 15:29:23.562039+00:00
402907.10400704964 --> 1104-02-15 02:29:46.209088+00:00
那些event.xdata 值显然超出了输入数据范围和 x 轴数据范围,并且无法用于以后使用(例如,尝试在 serie 中找到最接近的 y 值)。
那么,有谁知道我怎样才能得到正确的xdata?
【问题讨论】:
标签: python datetime matplotlib