如何在Matplotlib的datetime轴上移除无数据的时间段?
问题原因
已删除时间段仍在图表中显示的核心原因是resample('d')操作会自动补全时间索引覆盖范围内的所有连续日期,即使对应日期没有原始数据,也会生成值为NaN的行,这些空值行对应到x轴就会显示为空白的时间段。
解决方法
在resample操作完成后,直接删除对应列的空值行即可,修改后的代码如下:
import pandas as pd import seaborn as sns import matplotlib.pyplot as plt dfStd = df.resample('d').std() # 删除Feed_tph列为空的行,移除无数据的时间段 dfStd = dfStd.dropna(subset=['Feed_tph']) fig, ax = plt.subplots(figsize=(16,3)) bp = sns.barplot(x = dfStd.index.strftime('%d-%b'), y='Feed_tph', data=dfStd , color='darkorange', ax=ax) ax.set_ylabel('Dry Feed [tph]') ax.set_xlabel('') plt.xticks(rotation = 90) plt.show()
如果需要同时校验多个统计列的非空性,将对应列名加入dropna的subset参数列表即可。
可选替代方案
你也可以直接按日期分组计算标准差,从根源避免生成多余的空日期行:
# 按日期分组计算标准差,不会自动补全缺失的无数据日期 dfStd = df.groupby(df.index.date).std() # 将索引转回datetime格式,方便后续转字符串格式化 dfStd.index = pd.to_datetime(dfStd.index)
内容的提问来源于stack exchange,提问作者Carlos Tolvett
相关产品推荐
相关产品推荐

