如何在python中在同一图形上绘制多个密度图

如何在python中在同一图形上绘制多个密度图,python,pandas,matplotlib,plot,probability-density,Python,Pandas,Matplotlib,Plot,Probability Density,我知道这将是一个非常混乱的情节,但我很想知道最有效的方法是什么。我在csv文件中有一些类似的数据: ROI Band Min Max Mean Stdev 1 red_2 Band 1 0.032262 0.124425 0.078073 0.028031 2 red_2 Band 2 0.021072 0.064156 0.037923 0.012

我知道这将是一个非常混乱的情节,但我很想知道最有效的方法是什么。我在csv文件中有一些类似的数据:

    ROI          Band   Min         Max         Mean        Stdev
1   red_2        Band 1 0.032262    0.124425    0.078073    0.028031
2   red_2        Band 2 0.021072    0.064156    0.037923    0.012178
3   red_2        Band 3 0.013404    0.066043    0.036316    0.014787
4   red_2        Band 4 0.005162    0.055781    0.015526    0.013255
5   red_3        Band 1 0.037488    0.10783     0.057892    0.018964
6   red_3        Band 2 0.02814     0.07237     0.04534     0.014507
7   red_3        Band 3 0.01496     0.112973    0.032751    0.026575
8   red_3        Band 4 0.006566    0.029133    0.018201    0.006897
9   red_4        Band 1 0.022841    0.148666    0.065844    0.0336
10  red_4        Band 2 0.018651    0.175298    0.046383    0.042339
11  red_4        Band 3 0.012256    0.045111    0.024035    0.009711
12  red_4        Band 4 0.001493    0.033822    0.014678    0.007788
13  red_5        Band 1 0.030513    0.18098     0.090056    0.044456
37  bcs_1        Band 1 0.013059    0.076753    0.037674    0.023172
38  bcs_1        Band 2 0.035227    0.08826     0.057672    0.015005
39  bcs_1        Band 3 0.005223    0.028459    0.010836    0.006003
40  bcs_1        Band 4 0.009804    0.031457    0.018094    0.007136
41  bcs_2        Band 1 0.018134    0.083854    0.040654    0.018333
42  bcs_2        Band 2 0.016123    0.088613    0.045742    0.020168
43  bcs_2        Band 3 0.008065    0.030557    0.014596    0.007435
44  bcs_2        Band 4 0.004789    0.016514    0.009815    0.003241
45  bcs_3        Band 1 0.021092    0.077993    0.037246    0.013696
46  bcs_3        Band 2 0.011918    0.068825    0.028775    0.013758
47  bcs_3        Band 3 0.003969    0.021714    0.011336    0.004964
48  bcs_3        Band 4 0.003053    0.015763    0.006283    0.002425
49  bcs_4        Band 1 0.024466    0.079989    0.049291    0.018032
50  bcs_4        Band 2 0.009274    0.093137    0.041979    0.019347
51  bcs_4        Band 3 0.006874    0.027214    0.014386    0.005386
52  bcs_4        Band 4 0.005679    0.026662    0.014529    0.006505
我想创建一个8行的概率密度图:其中4行表示“红色”,另一行表示“黑色”。到目前为止,我只对红色和黑色ROI中的第1行进行了分析。但是我的代码输出了两个不同的图。我尝试过使用子绘图,但这对我不起作用

帮忙?我知道我的方法冗长而笨拙,所以非常感谢更聪明的解决方案

加载包 整理数据 绘制图形


我希望这个数字上有8行

有助于引导您走向正确方向的东西:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame()
for i in range(8):
    mean = 5-10*np.random.rand()
    std = 6*np.random.rand()
    df['score_{0}'.format(i)] = np.random.normal(mean, std, 60)

fig, ax = plt.subplots(1,1)
for s in df.columns:
    df[s].plot(kind='density')
fig.show()
基本上只是在列中循环,并在运行时进行绘图。对数字有更多的控制是非常有帮助的


groupby
+
str.split

df.groupby([df.ROI.str.split('_').str[0], 'Band']).Mean.plot.kde();

如果你想要一个传奇

df.groupby([df.ROI.str.split('_').str[0], 'Band']).Mean.plot.kde()
plt.legend();

看起来不错,例如不需要新的专栏。这一点非常清楚。谢谢@piRSquared!您知道如何更改图例的调色板吗。例如,如果我想使用其中一个:@JAG2024将所需的名称传递到
colormap
参数中
df.groupby([df.ROI.str.split(“'u').str[0],'Band']).Mean.plot.kde(colormap='Accent')
@JAG2024如果这确实回答了您的问题,请不要忘记接受答案。如果有用的话,请投票,如果还没有投票的话。。。我所有的线条都显示为相同的颜色。我想使用颜色贴图“RdGy”,这样“bcs”更黑,“红线”更红。有没有一个简单的方法可以做到这一点?我可以编辑上面的问题,或者在stackoverflow上发布一个新的问题。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame()
for i in range(8):
    mean = 5-10*np.random.rand()
    std = 6*np.random.rand()
    df['score_{0}'.format(i)] = np.random.normal(mean, std, 60)

fig, ax = plt.subplots(1,1)
for s in df.columns:
    df[s].plot(kind='density')
fig.show()
df.groupby([df.ROI.str.split('_').str[0], 'Band']).Mean.plot.kde();
df.groupby([df.ROI.str.split('_').str[0], 'Band']).Mean.plot.kde()
plt.legend();