我在x轴上设置了以下xlim
:
axA.set_xlim(datetime.date(2016, 12, 1), datetime.date(2018, 1, 30))
现在我想在X轴上获得10月12日(2017-10-12)的位置,以便我可以在那里添加注释。
我试图弄清楚使用date2num
和datestr2num
:
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)
首先,似乎date2num
和datestr2num
没有给出相同的结果,但更有问题的是,这些结果不在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()
答案 0 :(得分:1)
如果您的日期为xaxis,则可以直接使用日期对象:
ax.annotate('hello', xy=(datetime.datetime(2017, 10, 12), 1),
xytext=(datetime.datetime(2017, 10, 12), 5),
arrowprops={'facecolor': 'r'})