【问题标题】:Plotting period series in matplotlib pyplot在 matplotlib pyplot 中绘制周期序列
【发布时间】:2017-05-21 18:32:33
【问题描述】:

我正在尝试使用 matplotlib.pyplot 按季度绘制时间序列收入数据,但一直出现错误。下面是我的代码和错误所需的行为是使用 matplotlib 按季度绘制收入数据。当我尝试这样做时,我得到:

TypeError: Axis must havefreqset to convert to 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)

【问题讨论】:

  • 寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建minimal reproducible example
  • 我添加了额外的上下文

标签: pandas matplotlib timeserieschart


【解决方案1】:

如果你想使用 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()

您可以使用xticks 命令并用条形图表示数据,代码如下:

plt.bar(range(len(df.rev)), df.rev, align='center')
plt.xticks(range(len(df.rev)), df.date, size='small')

【讨论】:

  • @oammon 这能回答你的问题吗?
【解决方案2】:

好像是bug。

为我工作DataFrame.plot:

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

【讨论】:

  • 你正在使用 pandas 来绘制它。我发布的版本是一个简化版本,但我想了解是否有办法用 matplotlib 绘制它。
猜你喜欢
  • 2021-06-26
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
  • 2021-11-01
  • 2017-02-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多