Ich versuche, Daten neu zu formen, die wie folgt aussieht:Wie können mehrere Zeitreihensignale für die Verwendung mit sns.tplot umgestaltet werden?
t y0 y1 y2
0 0 -1 0 1
1 1 0 1 2
2 2 1 2 3
3 3 2 3 4
4 4 3 4 5
in etwa wie folgt:
t trial signal value
0 0 0 y -1
1 0 1 y 0
2 0 2 y 1
3 1 0 y 0
4 1 1 y 1
5 1 2 y 2
6 2 0 y 1
7 2 1 y 2
8 2 2 y 3
9 3 0 y 2
10 3 1 y 3
11 3 2 y 4
12 4 0 y 3
13 4 1 y 4
14 4 2 y 5
, so dass ich es in sns.tsplot
ernähren kann.
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns
fig = plt.figure()
num_points = 5
# Create some dummy line signals and assemble a data frame
t = np.arange(num_points)
y0 = t - 1
y1 = t
y2 = t + 1
df = pd.DataFrame(np.vstack((t, y0, y1, y2)).transpose(), columns=['t', 'y0', 'y1', 'y2'])
print(df)
# Do some magic transformations
df = pd.melt(df, id_vars=['t'])
print(df)
# Plot the time-series data
sns.tsplot(time="t", value="value", unit="trial", condition="signal", data=df, ci=[68, 95])
plt.savefig("dummy.png")
plt.close()
Ich hoffe, dies für die Linien zu erreichen:
https://stanford.edu/~mwaskom/software/seaborn/generated/seaborn.tsplot.html http://pandas.pydata.org/pandas-docs/stable/reshaping.html
omg, du das so schnell beantwortet! das funktioniert, aber gibt es keine einfachere Transformation? Ich denke, das muss eine sehr häufige Verwendung sein. – tarabyte
Ich denke "schmelzen" hier ist die beste Option. Sie können aber stattdessen etwas wie 'print df.set_index ('t'). Stack() verwenden. Reset_index (name = 'wert'). Rename (columns = {'level_1': 'variable'})', aber es ist komplizierter. – jezrael
dies scheint zu keiner Anzahl von Versuchen zu skalieren – tarabyte