У меня есть данные временного ряда, по которым я строю графики, используя pygal
.Вот как выглядят данные
[(datetime.datetime(2019, 3, 3, 0, 20, 22, 195908, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=330, name=None)), 12.0), (datetime.datetime(2019, 3, 3, 0, 20, 25, 807185, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=330, name=None)), 12.0), (datetime.datetime(2019, 3, 3, 0, 20, 29, 566157, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=330, name=None)), 12.0), (datetime.datetime(2019, 3, 3, 0, 20, 33, 57685, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=330, name=None)), 12.0), (datetime.datetime(2019, 3, 3, 0, 54, 32, 3897, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=330, name=None)), 12.0), (datetime.datetime(2019, 3, 3, 0, 54, 35, 739188, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=330, name=None)), 12.0), (datetime.datetime(2019, 3, 3, 0, 54, 39, 592752, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=330, name=None)), 12.0), (datetime.datetime(2019, 3, 3, 0, 54, 43, 242095, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=330, name=None)), 12.0), (datetime.datetime(2019, 3, 3, 0, 52, 37, 311601, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=330, name=None)), 11.0), (datetime.datetime(2019, 3, 3, 0, 52, 40, 976424, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=330, name=None)), 11.0)]
Теперь я могу сделать обычную bar plot
, используя pygal
, но теперь мне нужно построить histogram
.Я обнаружил, что у pandas
есть способ найти histogram
и построить его, используя matplotlib
.
Итак, вот что я сделал
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import datetime
import psycopg2
data = [(datetime.datetime(2019, 3, 3, 0, 20, 22, 195908, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=330, name=None)), 12.0), (datetime.datetime(2019, 3, 3, 0, 20, 25, 807185, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=330, name=None)), 12.0), (datetime.datetime(2019, 3, 3, 0, 20, 29, 566157, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=330, name=None)), 12.0), (datetime.datetime(2019, 3, 3, 0, 20, 33, 57685, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=330, name=None)), 12.0), (datetime.datetime(2019, 3, 3, 0, 54, 32, 3897, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=330, name=None)), 12.0), (datetime.datetime(2019, 3, 3, 0, 54, 35, 739188, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=330, name=None)), 12.0), (datetime.datetime(2019, 3, 3, 0, 54, 39, 592752, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=330, name=None)), 12.0), (datetime.datetime(2019, 3, 3, 0, 54, 43, 242095, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=330, name=None)), 12.0), (datetime.datetime(2019, 3, 3, 0, 52, 37, 311601, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=330, name=None)), 11.0), (datetime.datetime(2019, 3, 3, 0, 52, 40, 976424, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=330, name=None)), 11.0)]
df_hist = pd.DataFrame(np.array(data)).hist(bins=5) // I divide the data into 5 buckets
plt.savefig('hist.svg')
Но я сталкиваюсь со следующей ошибкой
Traceback (most recent call last):
File "/home/souvik/Music/Test331.py", line 120, in <module>
df_hist = pd.DataFrame(np.array(data)).hist(bins=5)
File "/home/souvik/django_test/webdev/lib/python3.5/site-packages/pandas/plotting/_core.py", line 2408, in hist_frame
layout=layout)
File "/home/souvik/django_test/webdev/lib/python3.5/site-packages/pandas/plotting/_tools.py", line 238, in _subplots
ax0 = fig.add_subplot(nrows, ncols, 1, **subplot_kw)
File "/home/souvik/django_test/webdev/lib/python3.5/site-packages/matplotlib/figure.py", line 1367, in add_subplot
a = subplot_class_factory(projection_class)(self, *args, **kwargs)
File "/home/souvik/django_test/webdev/lib/python3.5/site-packages/matplotlib/axes/_subplots.py", line 60, in __init__
).format(maxn=rows*cols, num=num))
ValueError: num must be 1 <= num <= 0, not 1
Однако, если я включу числовое значение и исключу значение datetime
из списка данных, я получу график
data = [x[1] for x in data]
df_hist = pd.DataFrame(np.array(data)).hist(bins=5)
plt.savefig('hist.svg')

Теперь по оси x я хотел диапазон временных рядов, чтобы я знал частоту данных за определенный интервал времени.Но я получаю ошибку, как упомянуто выше, когда я включаю исходные данные.
Как я могу получить histogram
данных временных рядов?Также вместо того, чтобы полагаться на matplotlib
, могу ли я использовать pygal
, чтобы сделать это?
Примечание: На рисунке выше приведены данные гораздо большего размера.Я уменьшил объем данных, чтобы разместить вопрос здесь.