My matplotlib graph is offset by 1 day, but only if I plot the data. What is going on here?
Here's a complete runnable example
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as dt
import matplotlib.ticker as ticker
from datetime import datetime
data = {'Value':[1, 1, 2, 1]}
df = pd.DataFrame(data, index =[
datetime(year=2019,month=7,day=30),
datetime(year=2019,month=7,day=31),
datetime(year=2019,month=8,day=1),
datetime(year=2019,month=8,day=2)])
display(df)
fig,ax= plt.subplots()
df.plot(ax=ax)
ax.axvline(x=datetime(year=2019,month=8,day=1).date())
ax.xaxis.set_major_locator(dt.MonthLocator())
ax.xaxis.set_major_formatter(dt.DateFormatter('%m-%d'))
ax.xaxis.set_minor_locator(dt.DayLocator())
ax.xaxis.set_minor_formatter(ticker.NullFormatter())
ax.set_xlim(datetime(year=2019,month=7,day=25).date(),
datetime(year=2019,month=8,day=8).date())
If I don't plot the data but just the vertical line, all is fine...
fig,ax= plt.subplots()
#df.plot(ax=ax)
ax.axvline(x=datetime(year=2019,month=8,day=1).date())
ax.xaxis.set_major_locator(dt.MonthLocator())
ax.xaxis.set_major_formatter(dt.DateFormatter('%m-%d'))
ax.xaxis.set_minor_locator(dt.DayLocator())
ax.xaxis.set_minor_formatter(ticker.NullFormatter())
ax.set_xlim(datetime(year=2019,month=7,day=25).date(),
datetime(year=2019,month=8,day=8).date())