2017-05-21 4 views
0

Ich versuche, Zeitreihen Umsatzdaten nach Quartal mit Matplotlib.pyplot plotten, aber immer wieder einen Fehler zu bekommen. Im Folgenden finden Sie meinen Code und die Fehler Das gewünschte Verhalten besteht darin, die Umsatzdaten mithilfe von matplotlib vierteljährlich zu plotten. Wenn ich versuche, dies zu tun, die ich erhalten:Plotperiode in Matplotlib pyplot

TypeError: Axis must have Freq set to convert to Periods

Ist es, weil Zeitreihendaten als Perioden ausgedrückt nicht in matplotlib aufgetragen werden kann? Unten ist mein Code.

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) 
+0

Fragen Debug-Hilfe zu suchen („Warum ist nicht dieser Code zu arbeiten?“) Muss das gewünschte Verhalten umfassen, um ein bestimmtes Problem oder Fehler und den kürzesten Code notwendig, es in der Frage selbst zu reproduzieren. Fragen ohne eine klare Problemstellung sind für andere Leser nicht nützlich. Siehe: Erstellen eines [mcve]. – ImportanceOfBeingErnest

+0

Ich habe zusätzlichen Kontext hinzugefügt – oammon

Antwort

0

Es scheint, wie Fehler.

Für mich arbeitet DataFrame.plot:

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

Sie verwenden Pandas, um es zu plotten. Die Version, die ich gepostet habe, ist eine vereinfachte Version, aber ich versuche zu verstehen, ob es eine Möglichkeit gibt, sie mit Matplotlib zu plotten. – oammon

0

Wenn Sie matplotlib verwenden möchten, sollten Sie den folgenden Code Sie die gewünschte Handlung geben:

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

Sie die xticks verwenden könnte befehle und repräsentiere die Daten mit einem Balkendiagramm mit folgendem Code:

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

@oammon beantwortet dies Ihre Frage? –

Verwandte Themen