【问题标题】:How to reset x tick labels in matplotlib如何在 matplotlib 中重置 x 刻度标签
【发布时间】:2019-11-18 15:25:06
【问题描述】:

我在 DataFrames 中有 5 个时间序列数据,每个数据都有不同的时间尺度。 例如,data1 是从 4/15 0:00 到 4/16 0:00,data2 从 9/16 06:30 到 7:00。 所有这些数据都在不同的 DataFrames 中,我想使用 matplotlib 绘制它们的图表。我想将 x 刻度标签的数量设置为 5,并将数据的日期放在最左边的 x 刻度标签上。我尝试了下面的代码,但无法得到我想要的图表。

fig = plt.figure(figsize=(15, 3))
for i in range(1,6):    # because I have 5 DataFrames in 'df_event_num'
    ax = plt.subplot(150+i)
    plt.title('event_num{}'.format(i))
    df_event_num[i-1]['Load_Avg'].plot(color=colors_2018[i-1])
    ax.tick_params(rotation=270)
fig.tight_layout()

我得到了这样的图表

再次,我想将 x 刻度标签的数量设置为 5,并将日期放在每个图表最左边的 x 刻度标签上。希望我想旋转 x 刻度标签的字符。 谁能教我如何获得我想要的图表?

df_event_num 有 5 个 DataFrame,我想制作名为“Load_Avg”的列数据的时间序列图。 这是“df_event_num”的示例数据。

print(df_event_num[0]['Load_Avg'])
>>>
TIMESTAMP
2018-04-15 00:00:00    406.2
2018-04-15 00:30:00    407.4
2018-04-15 01:00:00    409.6
2018-04-15 01:30:00    403.3
2018-04-15 02:00:00    405.0
2018-04-15 02:30:00    401.8
2018-04-15 03:00:00    401.1
2018-04-15 03:30:00    401.0
2018-04-15 04:00:00    402.3
2018-04-15 04:30:00    402.5
2018-04-15 05:00:00    404.3
2018-04-15 05:30:00    404.7
2018-04-15 06:00:00    417.0
2018-04-15 06:30:00    438.9
2018-04-15 07:00:00    466.4
2018-04-15 07:30:00    476.6
2018-04-15 08:00:00    499.3
2018-04-15 08:30:00    523.1
2018-04-15 09:00:00    550.2
2018-04-15 09:30:00    590.2
2018-04-15 10:00:00    604.4
2018-04-15 10:30:00    622.4
2018-04-15 11:00:00    657.7
2018-04-15 11:30:00    737.2
2018-04-15 12:00:00    775.0
2018-04-15 12:30:00    819.0
2018-04-15 13:00:00    835.0
2018-04-15 13:30:00    848.0
2018-04-15 14:00:00    858.0
2018-04-15 14:30:00    866.0
2018-04-15 15:00:00    874.0
2018-04-15 15:30:00    879.0
2018-04-15 16:00:00    883.0
2018-04-15 16:30:00    889.0
2018-04-15 17:00:00    893.0
2018-04-15 17:30:00    894.0
2018-04-15 18:00:00    895.0
2018-04-15 18:30:00    897.0
2018-04-15 19:00:00    895.0
2018-04-15 19:30:00    898.0
2018-04-15 20:00:00    899.0
2018-04-15 20:30:00    900.0
2018-04-15 21:00:00    903.0
2018-04-15 21:30:00    904.0
2018-04-15 22:00:00    905.0
2018-04-15 22:30:00    906.0
2018-04-15 23:00:00    906.0
2018-04-15 23:30:00    907.0
2018-04-16 00:00:00    909.0
Freq: 30T, Name: Load_Avg, dtype: float64

print(df_event_num[1]['Load_Avg'])
>>>
TIMESTAMP
2018-04-25 06:30:00    1133.0
2018-04-25 07:00:00    1159.0
Freq: 30T, Name: Load_Avg, dtype: float64
print(df_event_num[2]['Load_Avg'])
TIMESTAMP
2018-06-28 09:30:00     925.0
2018-06-28 10:00:00    1008.0
Freq: 30T, Name: Load_Avg, dtype: float64
print(df_event_num[3]['Load_Avg'])
>>>
TIMESTAMP
2018-09-08 00:00:00    769.3
2018-09-08 00:30:00    772.4
2018-09-08 01:00:00    778.3
2018-09-08 01:30:00    787.5
2018-09-08 02:00:00    812.0
2018-09-08 02:30:00    825.0
2018-09-08 03:00:00    836.0
2018-09-08 03:30:00    862.0
2018-09-08 04:00:00    884.0
2018-09-08 04:30:00    905.0
2018-09-08 05:00:00    920.0
2018-09-08 05:30:00    926.0
2018-09-08 06:00:00    931.0
2018-09-08 06:30:00    942.0
2018-09-08 07:00:00    948.0
2018-09-08 07:30:00    956.0
2018-09-08 08:00:00    981.0
Freq: 30T, Name: Load_Avg, dtype: float64
print(df_event_num[4]['Load_Avg'])
>>>
TIMESTAMP
2018-09-30 21:00:00    252.2
2018-09-30 21:30:00    256.5
2018-09-30 22:00:00    264.1
2018-09-30 22:30:00    271.1
2018-09-30 23:00:00    277.7
2018-09-30 23:30:00    310.0
2018-10-01 00:00:00    331.6
2018-10-01 00:30:00    356.3
2018-10-01 01:00:00    397.2
2018-10-01 01:30:00    422.4
2018-10-01 02:00:00    444.2
2018-10-01 02:30:00    464.7
2018-10-01 03:00:00    477.2
2018-10-01 03:30:00    487.2
2018-10-01 04:00:00    494.7
2018-10-01 04:30:00    515.2
2018-10-01 05:00:00    527.6
2018-10-01 05:30:00    537.5
2018-10-01 06:00:00    541.7
Freq: 30T, Name: Load_Avg, dtype: float64

【问题讨论】:

  • 您能提供一个数据样本吗? “我想旋转它们”到底是什么意思?
  • @ilja 我刚刚提供了一些数据样本。请检查一下。我想旋转 x 刻度标签的字符。

标签: python-3.x matplotlib time-series axis


【解决方案1】:

我稍微修改了你的代码:

  • 不需要使用range()进行循环遍历,直接遍历DataFrameslist即可

  • 使用创建的ax 子图设置数据和标题。

  • 根据单个数据帧的第一个和最后一个索引在 x 轴上创建 5 个线性分隔刻度:pd.to_datetime(np.linspace(df.index[0].value, df.index[-1].value, 5))

  • 仅使用最后一个值作为标签,并将所有其他值替换为空字符串:ts_names = ['','','','',ts_loc[-1]]

import numpy as np

colors_2018 = ['red', 'blue', 'green', 'yellow', 'orange', 'brown']

fig = plt.figure(figsize=(15, 4))
for i, df in enumerate(df_event_num):    # because I have 5 DataFrames in 'df_event_num'
    ax = plt.subplot(1,5,i+1)
    ax.plot(df['Load_Avg'], color=colors_2018[i])
    ax.set_title('event_num{}'.format(i))

    # If the index is not a Timestamp-type already:
    df.index = pd.to_datetime(df.index)

    # x-Axis locations of 5 timestamps
    ts_loc = pd.to_datetime(np.linspace(df.index[0].value, df.index[-1].value, 5))
    ax.set_xticks(ts_loc, minor=False)

    # Names of the timestamps (only last shown)
    ts_names = ['','','','',ts_loc[-1]]
    ax.set_xticklabels(ts_names, rotation="vertical") 

fig.tight_layout()

【讨论】:

    猜你喜欢
    • 2012-03-14
    • 1970-01-01
    • 2013-03-24
    • 2019-06-20
    • 2013-12-30
    • 2022-01-01
    • 2019-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多