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

结果图:

enter image description here

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...