获取x轴上的日期位置

时间:2017-12-24 00:02:59

标签: python-3.x datetime matplotlib

我在x轴上设置了以下xlim

axA.set_xlim(datetime.date(2016, 12, 1), datetime.date(2018, 1, 30))

现在我想在X轴上获得10月12日(2017-10-12)的位置,以便我可以在那里添加注释。

我试图弄清楚使用date2numdatestr2num

release_date = datetime.datetime(2017, 10, 12)

print(mdates.date2num(release_date))
print(mdates.datestr2num('2017-10-12'))

print(axA.get_xlim())

以上代码输出:

-736614.0
736614.0

(17136.0, 17561.0)

首先,似乎date2numdatestr2num没有给出相同的结果,但更有问题的是,这些结果不在xlim的范围内。

在给定上面设置的xlim的情况下,如何找到日期的X位置(放置注释)?

重现问题的代码:

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from datetime import datetime


def get_dataframe():
    values = [12, 16, 20]
    dates = [
        datetime(2017, 12, 24),
        datetime(2017, 12, 23),
        datetime(2017, 12, 22)
    ]

    df = pd.DataFrame(data={'date': dates, 'value': values})
    df = df.set_index(['date']).sort_index()

    return df


def plot(dataA):
    fig, axA = plt.subplots()
    dataA.plot(ax=axA)

    axA.set_xlim(datetime(2016, 12, 1), datetime(2018, 1, 30))

    release = datetime(2017, 10, 12)
    print(mdates.date2num(release))
    print(mdates.datestr2num('2017-10-12'))
    print(axA.get_xlim())


df = get_dataframe()
plot(df)
plt.show()

1 个答案:

答案 0 :(得分:1)

如果您的日期为xaxis,则可以直接使用日期对象:

ax.annotate('hello', xy=(datetime.datetime(2017, 10, 12), 1),  
            xytext=(datetime.datetime(2017, 10, 12), 5), 
            arrowprops={'facecolor': 'r'})