DateFormatter pandas 在重新采样 DF Hourly 后绘制错误的日期

问题描述

我正在尝试每小时重新采样我的 df 并绘制数据。但是,当我每小时重新采样 DateFormatter 时,会绘制错误的日期和错误的间隔。

如果我每天重新采样数据,它就可以正常工作。任何想法如何解决这个问题。您可以在下面找到我正在使用的代码

重新采样在第 23 行。将“D”更改为“H”以测试代码。 安装库:pip install seebuoy

非常感谢。

from seebuoy import ndbc
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from matplotlib.dates import DateFormatter
from matplotlib.ticker import AutoMinorLocator

buoy = 46235

title = 'Imperial Beach Nearshore (21 m)\nStation 46235'#- Maximun Daily' '
begin = '2020-09-01 00:00' # Begin of data set  YYYY/MM/DD
end = '2021-03-31 00:00' # end of data set  YYYY/MM/DD

years = ndbc.available_years(buoy,"stdmet")
df_store = []
for year in years[-3:]:
  df_store.append(ndbc.historic(buoy,year,dataset="stdmet"))

df = pd.concat(df_store)

df = df[(df.index > begin) & (df.index <= end)]

df=df.resample('H').agg(dict(wvht='max',dpd='mean',apd='median',mwd='mean'))

# Ploting dataset
fig,ax = plt.subplots(3,sharex=True,figsize=(10,8))
df.wvht.plot(ax=ax[0],color=['black'],linewidth=1)

ax[0].set_yticks([0,1,2,3,4,5,6])
ax[0].set_ylabel('Wave Hs,m',fontsize=9)
ax[0].tick_params(axis='y',labelsize=9)
ax[0].yaxis.set_minor_locator(AutoMinorLocator(2))

df.apd.plot(ax=ax[1],linewidth=1)
# df2.Ta.plot(ax=ax[1],color=['red'],linewidth=1)
ax[1].set_ylabel('Period,sec',fontsize=9)
ax[1].set_ylim(1,16)
ax[1].set_yticks([0,8,12,16])
ax[1].tick_params(axis='y',labelsize=9)
ax[1].yaxis.set_minor_locator(AutoMinorLocator(2))

df.mwd.plot(ax=ax[2],linewidth=1)
ax[2].set_ylabel('Wave Direction',fontsize=9)
ax[2].set_ylim(0,360)
ax[2].set_yticks(([0,90,180,270,360]))
ax[2].tick_params(axis='y',labelsize=9)
ax[2].xaxis.set_minor_locator(AutoMinorLocator(3))
ax[2].yaxis.set_minor_locator(AutoMinorLocator(2))


date_form = DateFormatter('%d%b\n%Y')
ax[2].xaxis.set_major_formatter(date_form)
# ax[2].xaxis.set_major_locator(mdates.DayLocator(interval=15))
# ax[2].xaxis.set_major_locator(mdates.HourLocator(interval=12))
ax[2].xaxis.set_major_locator(mdates.MonthLocator(interval=1))
# ax[2].xaxis.set_major_locator(mdates.YearLocator(1))

ax[2].tick_params(axis='x',labelsize=9,rotation=0)
for tick in ax[2].xaxis.get_majorticklabels():
          tick.set_horizontalalignment("center")

解决方法

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

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

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