在matplotlib pyplot中绘制时间序列图

4

我正在尝试使用matplotlib.pyplot绘制按季度划分的时间序列收入数据,但一直出现错误。以下是我的代码和错误信息。期望的行为是使用matplotlib按季度绘制收入数据。当我尝试这样做时,会出现以下错误:

TypeError: 轴必须具有freq设置才能转换为Periods

这是因为以周期表示的时间序列日期无法在matplotlib中绘制吗?以下是我的代码。

def parser(x):
    return pd.to_datetime(x, format='%m%Y')
tot = pd.read_table('C:/Desktop/data.txt', parse_dates=[2], index_col=[2], date_parser=parser)

tot = tot.dropna()
tot = tot.to_period('Q').reset_index().groupby(['origin', 'date'], as_index=False).agg(sum)

tot.head() 
origin  date    rev
0   KY  2016Q2  1783.16
1   TN  2014Q1  32128.36
2   TN  2014Q2  16801.40
3   TN  2014Q3  33863.39
4   KY  2014Q4  103973.66

plt.plot(tot.date, tot.rev)

寻求调试帮助的问题(“为什么这段代码不起作用?”)必须在问题本身中包含所需的行为、具体问题或错误以及重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建[mcve]。 - ImportanceOfBeingErnest
我已经添加了额外的上下文。 - oammon
2个回答

6
如果您想使用matplotlib,以下代码应该为您提供所需的绘图:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df = pd.DataFrame({'origin': ['KY','TN','TN','TN','KY'],
                     'date': ['2016Q2','2014Q1','2014Q2','2014Q3','2014Q4'],
                      'rev': [1783.16, 32128.36, 16801.40, 33863.39, 103973.66]})
x = np.arange(0,len(df),1)
fig, ax = plt.subplots(1,1)
ax.plot(x,df['rev'])
ax.set_xticks(x)
ax.set_xticklabels(df['date'])
plt.show()

enter image description here

你可以使用xticks命令,并使用以下代码将数据表示为条形图:
plt.bar(range(len(df.rev)), df.rev, align='center')
plt.xticks(range(len(df.rev)), df.date, size='small')

enter image description here


0

看起来像是个错误。

在我的电脑上 DataFrame.plot 工作正常:

ooc.plot(x='date', y='rev')

你正在使用pandas进行绘图。我发布的版本是一个简化版,但我正在尝试了解是否有一种方法可以使用matplotlib进行绘图。 - oammon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接