【问题标题】:matplotlib show minutes time-series in hour (change xticklabels)matplotlib 以小时为单位显示分钟时间序列(更改 xticklabels)
【发布时间】:2018-12-27 04:06:00
【问题描述】:

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

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 是错误的,因为我没有为其设置正确的日期时间索引。这里只是举例。

【问题讨论】:

标签: python pandas matplotlib time-series timeserieschart


【解决方案1】:

我不知道为什么结果看起来很糟糕。 我的解决方案是先去掉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()

【讨论】:

    猜你喜欢
    • 2017-03-25
    • 2014-10-05
    • 1970-01-01
    • 2016-03-26
    • 1970-01-01
    • 2012-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多