2016-03-06 59 views
1

我想考慮時間序列數據,加速度計的三個軸是精確的。我正在深入研究文檔,但並未立即看到如何提供多個信號並試圖找出如何整理大熊貓和海鳥的數據。繪製三個信號的一次運行之後,我希望能覆蓋這些相同信號的多次運行得到一個情節是這樣,但對於三個信號:如何用seaborn繪製多個因變量?

enter image description here

import matplotlib.pyplot as plt 
import pandas as pd 
import seaborn as sns 

data = [['t', 'x', 'y', 'z'], 
     ['0', '1.024', '0.9980', '1.001'], 
     ['1', '1.0-4', '0.9080', '1.021'], 
     ...] 
sns.set(color_codes=True) 
df = pd.DataFrame(data, columns=['t', 'x', 'y', 'z']) 
sns.tsplot(time='t', y=['x', 'y', 'z'], data=df).savefig("testing.png") 


ValueError: setting an array element with a sequence. 

pandas DataFrame docs tsplot docs

沒有辦法將這些獨立的地塊組合起來嗎?

Plot multiple DataFrame columns in Seaborn FacetGrid

回答

3

這似乎工作:

N=100 

num_runs = 3 
out = [] 
for k in range(num_runs): 
    data = np.random.rand(N,3) + np.sin(np.arange(N)/5)[:,np.newaxis] 
    data = np.hstack([np.arange(N)[:,np.newaxis],data]) 
    data = np.hstack([np.zeros(N)[:,np.newaxis]+k,data]) 
    out.append(data) 

data = np.vstack(out) 

df = pd.DataFrame(data, columns=['sub','t', 'x', 'y', 'z']) 
dfm = pd.melt(df, id_vars=['t','sub'], value_vars=['x', 'y', 'z']) 
dfm 
sns.tsplot(time='t', 
      value='value', 
      condition='variable', 
      data=dfm, 
      err_style="boot_traces", 
      unit='sub', 
      n_boot=50) 

plot

數據幀看起來像這樣後pd.melt

t sub variable value 
0 0 0 x 0.952150 
1 1 0 x 0.343075 
2 2 0 x 0.630453 
3 3 0 x 0.998851 
4 4 0 x 1.237932 
5 5 0 x 0.958720 

夫婦評論:

  • tsplot希望通過標籤列取消旋轉的痕跡。 pd.melt爲您做到這一點。

  • tsplot也期待給定變量的多個「試驗」,因此我用來製作示例數據幀的循環。即使你只有一條曲線,你也需要有一個unit列,你可以傳遞給tsplot。沒有這個,我無法讓它工作。