从 sns.kdeplot 中提取数据

问题描述 投票:0回答:2

是否可以在绘图之前从

sns.kdeplot()
中提取数据? IE。不使用该功能
y.get_lines()[0].get_data()
后期绘图

python matplotlib seaborn kdeplot
2个回答
4
投票

这可以通过从 matplotlib Axes 对象中提取线条数据来完成:

import numpy as np
from seaborn import kdeplot

my_data = np.random.randn(1000)
my_kde = kdeplot(my_data)
line = my_kde.lines[0]
x, y = line.get_data()

fig, ax = plt.subplots()
ax.plot(x[x>0], y[x>0])

或者统计模型方式:

import statsmodels.api as sm

dens = sm.nonparametric.KDEUnivariate(np.random.randn(1000))
dens.fit()
x =np.linspace(0,1,100) #restrict range to (0,1)
y = dens.evaluate(x)
plt.plot(x,y)

1
投票

基于 statsmodels 的文档

import numpy as np
import seaborn as sns
import statsmodels.api as sm
import matplotlib.pyplot as plt

# generate bimodal disrtibution
X1 = np.random.normal(100, 10, 250)
X2 = np.random.normal(10, 20, 250)
X = np.concatenate([X1, X2])

# get density from seaborn
x, y = sns.kdeplot(X).lines[0].get_data()

# get density from statsmodel
kde = sm.nonparametric.KDEUnivariate(X).fit()
xx, yy = (kde.support, kde.density)

# compare outputs
plt.plot(x, y, label='from sns')
plt.plot(xx, yy, label='from statsmodels')
plt.legend()

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.