【问题标题】:How to get data in DateTime format from plot with Events in python?python - 如何从带有事件的python图中获取DateTime格式的数据?
【发布时间】:2016-01-11 15:51:40
【问题描述】:

我在 iPython DataFrame 中有这样的数据

    Date                        X           Y           Z
0   2015-11-30 20:23:05.556     281.764900  -43.895060  8.714666
1   2015-11-30 20:23:05.757     192.519990  -44.636436  1.720552
2   2015-11-30 20:23:05.958     149.030600  -45.098050  1.958352
3   2015-11-30 20:23:06.171     140.707600  -44.622448  1.510729
4   2015-11-30 20:23:06.366     139.154890  -45.154003  4.783974
5   2015-11-30 20:23:06.564     138.875140  -44.790306  2.266093

这些列的dtypes 是:

Date    datetime64[ns]
X              float64
Y              float64
Z              float64
dtype: object

我像这样将button_press_event 设置为我的fig

def onclick(event):
    print 'button=%d, x=%d, y=%d, xdata=%s, ydata=%f'%(
        event.button, event.x, event.y, event.xdata, event.ydata)
cid = fig.canvas.mpl_connect('button_press_event', onclick)

我想从 x 轴以Date 格式或String 格式获取数据,但是在点击图表后我只有这个

button=1, x=152, y=339, xdata=735932.856811, ydata=8.518828

如何在String中设置xdata的输出?

【问题讨论】:

    标签: python events pandas matplotlib


    【解决方案1】:

    Matplotlib 的日期支持早于 numpy 的日期时间支持(并且完全早于 pandas)。因此,它使用它的own internal date convention

    要将返回的“原始”数字转换为日期时间,请使用matplotlib.dates.num2date

    作为一个类似于你正在做的例子:

    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:
            print mdates.num2date(event.xdata)
    
    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()
    df.plot(ax=ax)
    fig.canvas.mpl_connect('button_press_event', on_click)
    plt.show()
    

    【讨论】:

    • 所以实际上解决方案只是放在mdates.num2date(event.xdata)而不是event.xdata。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-21
    • 1970-01-01
    • 2023-02-11
    • 2017-07-31
    • 2015-07-09
    • 1970-01-01
    • 2017-10-25
    相关资源
    最近更新 更多