将日期转换为X轴上的位置将返回越界值浮点数

时间:2017-12-24 09:46:18

标签: python-3.x datetime matplotlib

我正在尝试在X轴(由datetime s组成)上获取日期的X位置。

我的X轴是2016年12月到2018年1月之间的日期:

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

output >> (17136.0, 17561.0)

我想在10月12日放置一个注释,为此我需要知道该日期在轴上的位置。我阅读了文档并尝试以两种不同的方式进行操作:

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

output >> 736614.0
output >> 736614.0

date2numdatestr2num返回的值不在我的X轴范围内((17136.0, 17561.0),见上文),尽管提供的日期明显在范围内。

重现问题的最小代码:

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()

注意:我刚注意到在绘制数据之前设置xlim似乎会返回给定范围内的日期,但是我的图表会从1月3986年开始!

我正在使用:

$ python --version
Python 3.6.3
$ pip freeze | grep matplot
matplotlib==2.1.1

0 个答案:

没有答案