Как конвертировать значение метки на matplotlib - PullRequest
0 голосов
/ 10 октября 2019

Я пытаюсь создать гистограмму для времени восстановления какой-либо системы, а необработанные данные выглядят так:

+---------------------+--------------------+-------------+
|     Start Time      |      End Time      |  Duration   |
+---------------------+--------------------+-------------+
| 2019-09-01 8:50:04  | 2019-09-02 9:29:35 | 24h 39m 31s |
| 2019-09-01 11:58:32 | 2019-09-02 9:34:21 | 21h 35m 49s |
| 2019-09-02 0:24:56  | 2019-09-02 9:58:02 | 9h 33m 6s   |
+---------------------+--------------------+-------------+

Чтобы легко вычислить, я преобразовал значения в столбце Duration в секунду (например, от 24h 39m 31s до 88771) и используйте это значение для ввода plt.hist().

Гистограмма работает нормально, но я хочу, чтобы на метке оси х отображались не секунды, а минуты.

output of histogram

import numpy as np
import matplotlib
import matplotlib.pyplot as plt

%matplotlib inline

x = np.array([88771,77749,34386,....])

plt.hist(x, bins=20)

Как отобразить отформатированное значение на метке оси?

1 Ответ

2 голосов
/ 10 октября 2019

Самый простой способ - преобразовать вашу продолжительность непосредственно в минуты, а затем составить гистограмму этого. Однако, если по какой-то причине вы не хотите изменять свой массив, вы можете вручную установить xticks, используя matplotlib модуль тикера :

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
#generate random data
x=np.random.randint(low=0,high=1e4,size=1000)

fig, axs = plt.subplots(figsize=(15, 10), nrows=2,ncols=1,constrained_layout=True)
#Plot data with duration in second
axs[0].hist(x,bins=50)
axs[0].set_xlabel('Duration [sec]')

#Plot data with duration in minutes
axs[1].hist(x,bins=50)
#modify tick labels
ticks=np.round(axs[1].get_xticks()/60)
axs[1].xaxis.set_major_formatter(ticker.FixedFormatter(ticks))

axs[1].set_xlabel('Duration [min]')

результат:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...