繁体   English   中英

matplotlib以分钟显示分钟时间序列(更改xticklabels)

[英]matplotlib show minutes time-series in hour (change xticklabels)

我的代码显示一天中每分钟是否缺货:

sq_t = df_stock_quantity_log[['is_stockout']].resample('T').ffill().fillna(0).astype(int).squeeze()

nrows =10

fig, axs = plt.subplots(nrows=nrows, figsize=(18, 40))

for idx, date in enumerate(df.index[:nrows]):
    s = sq_t[date.strftime('%Y-%m-%d')]
    if len(s) < 24*60:
        s = np.concatenate((np.zeros(24*60-len(s)),s))
    axs[idx].plot(s, label=idx)

plt.legend(loc='best')
plt.show()

输出是

在此处输入图片说明

我想将xtick更改为0〜23并将代码更改为

fig, axs = plt.subplots(nrows=nrows, figsize=(18, 40))


for idx, date in enumerate(df.index[:nrows]):
    s = sq_t[date.strftime('%Y-%m-%d')]

    if len(s) < 24*60:
        s = np.concatenate((np.zeros(24*60-len(s)),s))
    axs[idx].plot(s, label=idx)
    axs[idx].set_xticks(s)
    axs[idx].set_xticklabels(['h %d' % (ii/ 60,) for ii in range(0, 24*60 , 60)])

plt.legend(loc='best')
plt.show()

但是结果非常糟糕:

在此处输入图片说明


sq_t信息:

在此处输入图片说明

在此处输入图片说明

PS:我知道第一天图片的xticklabel是错误的,因为我没有为其设置适当的日期时间索引。 这里只是一个例子。

我不知道为什么结果看起来很糟糕。 我的解决方案是首先删除sq_t的DatetimeIndex,然后set_xticks看起来不错。

sq_t = df_stock_quantity_log[['is_stockout']].resample('T').ffill().fillna(0).astype(int).squeeze()

nrows =10

fig, axs = plt.subplots(nrows=nrows, figsize=(18, 40))


for idx, date in enumerate(df.index[:nrows]):
    s = sq_t[date.strftime('%Y-%m-%d')]

    if len(s) < 24*60:
        s = pd.Series(np.concatenate((np.zeros(24*60-len(s)),s)))
    axs[idx].plot(s.reset_index(drop=True), label=idx)
    axs[idx].set_xticks(range(0, 24*60, 60))
    axs[idx].set_xticklabels(['h%d' % (ii/ 60,) for ii in range(0, 24*60 , 60)])

plt.legend(loc='best')
plt.show()

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM