如何用seaborn绘制多个因变量?

时间:2016-03-06 23:48:32

标签: python pandas accelerometer seaborn

我想考虑时间序列数据,确切地说加速度计的三个轴。我正在挖掘文档,但我没有立即看到如何提供多个信号,并试图弄清楚如何组织我的数据为大熊猫和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

1 个答案:

答案 0 :(得分:3)

这似乎有效:

readlines()

plot

indices = [x[0] * 4 + 2 for x in enumerate(lines)] filtered_lines = [lines[i] for i in indices if len(lines) > i]

之后,数据框看起来像这样
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)

夫妻评论:

  • tsplot希望使用标签列解除轨迹。 pd.melt为您做到这一点。

  • tsplot也期待多次"试验"对于给定的变量,因此我用来制作示例数据帧的循环。即使您只有一个跟踪,您也需要有一个 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。没有它,我无法让它发挥作用。