2016-03-06 137 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。没有这个,我无法让它工作。