gpt4 book ai didi

python - 使用 pandas DataFrame 的多列使用 relplot() 绘制连续误差条图

转载 作者:太空宇宙 更新时间:2023-11-03 20:39:26 27 4
gpt4 key购买 nike

我将相同物质的光谱数据加载到 pandas DataFrame 中,看起来像这样(有 20 个实验,波数达到 2300):

    experiment       0      1      2      3      4
wave number
400 358.0 307.1 242.6 364.4 308.2
401 378.9 328.6 283.7 353.3 319.2
402 402.4 351.4 320.4 347.6 329.8
403 434.8 379.1 339.7 362.4 338.8
404 477.1 412.1 339.7 400.4 345.9
405 522.0 446.7 334.1 444.9 352.6 ...
...

我已经通过手动计算误差线的平均值和值并使用 matplotlib plt.errorbar() 函数实现了一个粗略但有效的版本。它看起来像这样(使用上面的数据):

enter image description here

但我认为这看起来相当难看,所以我想使用seaborn。我想要一个看起来像 this 的情节.

seaborn.relplot() 似乎能够准确地计算和绘制我想要的内容(如上面的链接所示),但由于我的数据结构与他们在教程中使用的不同,我真的不知道应该如何做去做这件事吧。

最佳答案

假设您的 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

其中experimentwave_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

然后,我们需要结合 experimentwave_number 来融化此 DF 以生成多行。我们可以使用 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 列是字符串,因此我将它们转换为 float :

df.measured_value = df.measured_value.astype(float)

现在绘制seaborn图就非常简单了:

import seaborn as sns
import matplotlib.pyplot as plt
sns.relplot(x="wave_number", y="measured_value", kind="line", data=df)
plt.show()

这给出了:

Resulting plot

关于python - 使用 pandas DataFrame 的多列使用 relplot() 绘制连续误差条图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56948709/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com