【发布时间】:2021-07-05 09:12:28
【问题描述】:
我正在使用 seaborn 库进行数据可视化,并尝试显示标准正态分布。这种情况下的基本情况如下所示:
import numpy as np
import seaborn as sns
n=1000
N= np.random.randn(n)
fig=sns.displot(N,kind="kde")
其行为符合预期。当我尝试同时绘制多个分布时,我的问题就开始了。我尝试了蛮力的N2= np.random.randn(n//2) 和fig=sns.displot((N,N2),kind="kde"),它返回两个分布(如所希望的那样),但是样本量较小的那个有显着不同(并且更平坦)。无论样本大小如何,适当的密度图(或直方图)都应该使图下方的面积等于 1,但显然不是这样。
知道 seaborn 可以与 pandas Dataframes 一起使用,我尝试使用下面更复杂(通常是糟糕且效率低下,但我希望清楚)的代码再次尝试在同一个图表上进行多个分布:
import numpy as np
import seaborn as sns
import pandas as pd
n=10000
N_1= np.reshape(np.random.randn(n),(n,1))
N_2= np.reshape(np.random.randn(int(n/2)),(int(n/2),1))
N_3= np.reshape(np.random.randn(int(n/4)),(int(n/4),1))
A_1 = np.reshape(np.array(['n1' for _ in range(n)]),(n,1))
A_2 = np.reshape(np.array(['n2' for _ in range(int(n/2))]),(int(n/2),1))
A_3 = np.reshape(np.array(['n3' for _ in range(int(n/4))]),(int(n/4),1))
F_1=np.concatenate((N_1,A_1),1)
F_2=np.concatenate((N_2,A_2),1)
F_3=np.concatenate((N_3,A_3),1)
F= pd.DataFrame(data=np.concatenate((F_1,F_2,F_3),0),columns=["datar","cat"])
F["datar"]=F.datar.astype('float')
fig=sns.displot(F,x="datar",hue="cat",kind="kde")
这再次显示了非常不同(几乎按比例缩放)的分布,证实了这种情况下的结果与我的预期不一致(即大致重叠的分布)。我不明白这个图表是如何工作的吗?有一种完全不同的方法可以在我缺少的同一张图上绘制多个分布?
【问题讨论】:
-
@JohanC 是的,我完全忽略了 kdeplot 的文档。我对默认选项可能不太直观这一事实感到困惑,但我想这是一个选择......谢谢,如果您将此作为答案报告,我会接受它作为正确的选项。跨度>
标签: python numpy random seaborn normal-distribution