2014-10-08 9 views
1

假設我有一個數據幀熊貓這樣根據一個大熊貓時間序列圖的一些因素改變標記

df = pd.DataFrame(
    {'data':[1, 2, 3, 4, 5], 'group': [-1, 0, 1, 0, -1]}, 
    index=pd.date_range('2014-01-01', periods=5) 
) 

我想根據df.group標記所在的變化繪製的時間序列df.data。有沒有一種簡單的方法可以使用df.plot()?如果沒有,那麼做一個簡單的方法是什麼?

回答

1

我首先想到的是用seaborn,這是在這個非常好:

import numpy as np 
import pandas 
import seaborn 
import matplotlib.pyplot as plt 
%matplotlib inline 

df = pandas.DataFrame({ 
    'data': [1, 2, 3, 4, 5], 
    'group': [-1, 0, 1, 0, -1] 
}, index=pandas.date_range('2014-01-01', periods=5)) 
df 

fgrid = seaborn.FacetGrid(df.reset_index(), hue='group') 
fgrid.map(plt.plot, 'index', 'data', linestyle='none', marker='o') 

的問題是,我不能讓這個發揮好與事實,你的x軸值爲日期。

enter image description here

1

如果固定日期,並利用seaborn由保羅·H作爲建議不要對你的工作,這裏是一個相當暴力的方式,使得使用GROUPBY和pyplot的顏色週期(中雖然可以很容易地定義你自己的顏色/標記循環)。

import pandas as pd 
import matplotlib.pyplot as plt 

df = pd.DataFrame(
    {'data':[1, 2, 3, 4, 5], 
    'group': [-1, 0, 1, 0, -1]}, 
    index=pd.date_range('2014-01-01', periods=5)) 

fig, ax = plt.subplots() 

nc = len(plt.rcParams['axes.color_cycle']) 
for i, g in enumerate(df.groupby('group')): 
    ax.scatter(g[1].index, g[1]['data'], 
       color=plt.rcParams['axes.color_cycle'][i % nc]) 

fig.autofmt_xdate() 
plt.show() 

所得的情節:

resulting plot

+0

我認爲這是目前比較好的方法。 – 2014-10-09 00:55:11