问题描述
我正在尝试每小时重新采样我的 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 (将#修改为@)