如何在python中在同一图形上绘制多个密度图
我知道这将是一个非常混乱的情节,但我很想知道最有效的方法是什么。我在csv文件中有一些类似的数据:如何在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
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();