我正在尝试在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
date2num
和datestr2num
返回的值不在我的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