Предполагая, что ваш DF является многоиндексным, он должен выглядеть примерно так:
0 1 2 3 4
experiment wave_number
0 400 358.0 307.1 242.6 364.4 308.2
1 401 378.9 328.6 283.7 353.3 319.2
2 402 402.4 351.4 320.4 347.6 329.8
3 403 434.8 379.1 339.7 362.4 338.8
4 404 477.1 412.1 339.7 400.4 345.9
5 405 522.0 446.7 334.1 444.9 352.6
, где experiment
и wave_number
- индексы.Сначала нам нужно переместить их в столбцы, используя df.reset_index()
.Теперь он должен выглядеть следующим образом:
df = df.reset_index()
experiment wave_number 0 1 2 3 4
0 0 400 358.0 307.1 242.6 364.4 308.2
1 1 401 378.9 328.6 283.7 353.3 319.2
2 2 402 402.4 351.4 320.4 347.6 329.8
3 3 403 434.8 379.1 339.7 362.4 338.8
4 4 404 477.1 412.1 339.7 400.4 345.9
5 5 405 522.0 446.7 334.1 444.9 352.6
Затем нам нужно расплавить этот DF, чтобы создать несколько строк, с комбинациями experiment
и wave_number
.Мы можем использовать df.melt()
для этого:
df = df.melt(id_vars=["experiment", "wave_number"], value_vars=["0", "1", "2", "3", "4"], var_name="measurement_number", value_name="measured_value")
Теперь это должно выглядеть примерно так:
df.sort_values(by=["wave_number", "measurement_number"])
experiment wave_number measurement_number measured_value
0 0 400 0 358.0
6 0 400 1 307.1
12 0 400 2 242.6
18 0 400 3 364.4
24 0 400 4 308.2
1 1 401 0 378.9
7 1 401 1 328.6
13 1 401 2 283.7
19 1 401 3 353.3
25 1 401 4 319.2
2 2 402 0 402.4
8 2 402 1 351.4
14 2 402 2 320.4
20 2 402 3 347.6
26 2 402 4 329.8
3 3 403 0 434.8
9 3 403 1 379.1
15 3 403 2 339.7
21 3 403 3 362.4
27 3 403 4 338.8
4 4 404 0 477.1
10 4 404 1 412.1
16 4 404 2 339.7
22 4 404 3 400.4
28 4 404 4 345.9
5 5 405 0 522.0
11 5 405 1 446.7
17 5 405 2 334.1
23 5 405 3 444.9
29 5 405 4 352.6
Мои measured_value
столбцы были строками по некоторым причинам, поэтому я преобразую ихчтобы плавать:
df.measured_value = df.measured_value.astype(float)
Теперь довольно просто нарисовать сюжет морского происхождения:
import seaborn as sns
import matplotlib.pyplot as plt
sns.relplot(x="wave_number", y="measured_value", kind="line", data=df)
plt.show()
Что дает: