如何解决matplotlib 日期格式化程序或日期定位器未显示第一个日期索引并从下一个开始
我希望我的 x-ticks 仅将星期一显示为月-日。我尝试了解决方案 here 我得到了正确的刻度格式但是定位器有问题并且第一个日期未正确显示。根据我的索引,第一个刻度应该在 2 月 3 日。
重现我的结果的代码如下:
import seaborn as sns
import matplotlib.dates as mdates
import datetime as dt
import matplotlib.ticker as ticker
import pandas as pd
width,height = plt.figaspect(.30)
fig,ax = plt.subplots(1,1,figsize=(width,height),dpi=300,constrained_layout=False)
day_pal = sns.color_palette("pastel",7)
date_df = pd.DataFrame()
date_df['ts'] = pd.Series(pd.date_range(START_DATE,periods=12*7,freq="D"))
date_df['weekday'] = date_df['ts'].dt.weekday
print(date_df.ts[0])
print(date_df.ts[len(x)-1])
x = list(date_df.ts)
daily_totals = range(len(x)) + np.random.randint(0,10,len(x))
ax.plot(x,daily_totals,lw=3,color='black',alpha=0.5)
plt.axvline(x[42],color="red",lw=5,linestyle="--",alpha = 0.6)
for wkdy in range(0,5):
start = np.array(date_df[date_df.weekday==wkdy]['ts'])
end = start + pd.timedelta(days=1)
for i in range(len(start)):
ax.axvspan(start[i],end[i],alpha=0.5,color = day_pal[wkdy])
start = np.array(date_df[date_df.weekday==5]['ts'])
end = start + pd.timedelta(days=2)
for i in range(len(start)):
ax.axvspan(start[i],color = "gray")
ax.set_ylabel("Number of Trips")
ax.set_xlabel("Date")
ax.set_xlim(x[0],x[len(x) -1 ] )
ax.xaxis.set_major_locator(mdates.DayLocator(interval=7))
ax.xaxis.set_major_formatter(mdates.DateFormatter("%b-%d"))
ax.xaxis.set_minor_formatter(mdates.DateFormatter("%b-%d"))
plt.xticks(rotation=65)
plt.show()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。