Python 如何使用pandas绘制时间序列数据的直方图?
我有一个时间序列数据,我在上面使用Python 如何使用pandas绘制时间序列数据的直方图?,python,pandas,matplotlib,Python,Pandas,Matplotlib,我有一个时间序列数据,我在上面使用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(o
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)]
现在我可以使用pygal
进行常规的条形图
,但现在我需要绘制直方图
。我发现pandas
有一种方法可以找到直方图
,并使用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
现在在x轴上,我想要时间序列范围,所以我知道在特定时间间隔下数据的频率。但是当我包含原始数据时,我得到了上面提到的错误
如何获取时间序列数据的直方图
?另外,我是否可以使用pygal
来代替依赖matplotlib
注意:上图是一个更大的数据。我已经减少了数据量,以便在这里发布问题
data = [x[1] for x in data]
df_hist = pd.DataFrame(np.array(data)).hist(bins=5)
plt.savefig('hist.svg')