Как преобразовать столбец индекса типа int64 в час в matplotlib xticks - PullRequest
0 голосов
/ 25 мая 2020

Я хочу построить matplotlib гистограмму с данными:

     value
Hour    
0    100
1    200
2    100
3    200
4    100
5    200
6    200
7    200
8    100
9    200
10   100
11   100
12   200
13   100
14   100
15   200
16   100
17   200
18   100
19   100
20   100
21   200
22   100
23   200

, который вернул график с целыми числами 1 to 23 как xticks. Ожидаемый результат - изменение формата xticks на формат времени, т.е. hour:minute, например 01:00, 02:00, и т. Д. c ... Hour был в типе int64.

Код для графика:

fig, ax = plt.subplots(figsize=(30,10))

plt.xticks(np.arange(0,  24), fontsize=30)  
plt.bar(x.index, x.value, color = 'c') 

# x.index = pd.to_datetime(x.index, format='%H').strftime('%H')

# ax.xaxis.set_minor_formatter(mdates.DateFormatter('%H:%M'))

# x.index = [datetime.time(i, 0) for i in x.index]

ax.get_yaxis().set_major_formatter(
    ticker.FuncFormatter(lambda x, p: format(int(x), ',')))

plt.xlabel('Hour', fontsize=35)
plt.ylabel('Value', fontsize=35)

Я попытался преобразовать столбец индекса Hour в формат времени (час) с помощью:

x.index = pd.to_datetime(x.index, format='%H').strftime('%H')

, который обнаружил ошибку:

TypeError: the dtypes of parameters x (object) and width (float64) are incompatible

Также пробовали ax.xaxis.set_minor_formatter(mdates.DateFormatter('%H:%M')) и x.index = [datetime.time(i, 0) for i in x.index] на основе других похожих вопросов, но ни один из них не работал.

Почему не работает? Это из-за формы индекса или я неправильно изменил столбец Hour с int64 на time?

1 Ответ

0 голосов
/ 25 мая 2020

Вы можете попробовать это. Используйте pd.Index.astype

pd.to_datetime(df.index.astype('object'),format='%H').strftime('%H:%M')

Index(['00:00', '01:00', '02:00', '03:00', '04:00', '05:00', '06:00', '07:00',
       '08:00', '09:00', '10:00', '11:00', '12:00', '13:00', '14:00', '15:00',
       '16:00', '17:00', '18:00', '19:00', '20:00', '21:00', '22:00', '23:00'],
      dtype='object', name='Hour')
...