0
0 комментариев

Добрый день.

Пытаюсь построить график по точкам: по оси абсцисс — время, по оси ординат — какие-либо значения. Время преобразую из timestamp unix time в нс. График строится, но граничные значения какие-то странные.

Исходные данные:

            timestamp  Value, %
0 2017-04-14 22:00:00      4.96
1 2017-04-14 23:00:00      5.83
2 2017-04-15 00:00:00     10.96
3 2017-04-15 01:00:00      0.03
4 2017-04-15 02:00:00      0.02
5 2017-04-15 03:00:00      0.14
6 2017-04-15 04:00:00      0.30
7 2017-04-15 05:00:00      1.55
8 2017-04-15 06:00:00      2.14
9 2017-04-15 07:00:00      2.74

Код:

import matplotlib.dates as mdates
import matplotlib.pyplot as plt
import pandas as pd
 
plt.style.use('ggplot')  # Красивые графики
plt.rcParams['figure.figsize'] = (10, 3 )  # Размер картинок
columns = ['timestamp', 'Value, %']
dataset = [
(1492207200000, 4.96),
(1492210800000, 5.83),
(1492214400000, 10.96),
(1492218000000, 0.03),
(1492221600000, 0.02),
(1492225200000, 0.14),
(1492228800000, 0.3),
(1492232400000, 1.55),
(1492236000000, 2.14),
(1492239600000, 2.74)]
df = pd.DataFrame(data=dataset, columns=columns)
df['timestamp'] = pd.to_datetime(df['timestamp'], unit='ms')
df.plot(x='timestamp', style='.-')
ax = plt.gca()
ax.xaxis.set_major_formatter(mdates.DateFormatter('%d-%m-%y %H:%M'))
print(df)
plt.show()

График:

График 1
При этом стоит сделать хотя бы одно значение времени не кратное часу (например, прибавить к первому времени 1 нс или поменять порядок местами), так сразу график начинает строиться нормально. Например:

dataset = [
(1492207200001, 4.96),
(1492210800000, 5.83),
(1492214400000, 10.96),
(1492218000000, 0.03),
(1492221600000, 0.02),
(1492225200000, 0.14),
(1492228800000, 0.3),
(1492232400000, 1.55),
(1492236000000, 2.14),
(1492239600000, 2.74)]

График:

График 2

Я вот пытаюсь понять: это какой-то глюк matplotlib или я что-то делаю не так?


Добавить комментарий