python - 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], color=['black'], 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,4,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], color=['black'], 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")
解决方案
推荐阅读
- angular - 对预检请求的响应未通过访问控制检查:它没有 HTTP ok 状态。(Spring Security & Angular)
- python - 创建一个列,该列是每行中具有最大长度的字符串 - Pandas Dataframe
- office-js - Outlook for Mac 16.38 加载项对话框无法向父级发布消息
- pandas - 从第一张表中提取信息时如何更新不同的谷歌表?
- r - R:data.table 使用 for 循环来处理多列
- postgresql - 无法在 AWS CodeBuild 中访问 Postgres Docker 容器
- ruby - 如何在 Jenkins 上的 docker 镜像中运行快车道
- java - 在 JFreeChart 中,如何将域轴标签定位在图例旁边?
- java - 无法插入 Android Studio 的值
- android - 在 API 29 中未调用具有自定义意图的广播接收器