n10*_*000 17 python plot matplotlib seaborn
我正在尝试用seaborn 进行核密度估计(KDE)图并找到中位数.代码看起来像这样:
import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt
sns.set_palette("hls", 1)
data = np.random.randn(30)
sns.kdeplot(data, shade=True)
# x_median, y_median = magic_function()
# plt.vlines(x_median, 0, y_median)
plt.show()
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我需要magic_function()从中获取中值x和y值kdeplot.然后我想用例如vlines.但是,我无法弄清楚如何做到这一点.结果应该看起来像这样(显然黑色中间条在这里是错误的):

我想我的问题与seaborn并不严格相关,也适用于其他类型的matplotlib图.任何想法都非常感谢.
小智 21
你需要:
import numpy as np
import scipy
import seaborn as sns
import matplotlib.pyplot as plt
sns.set_palette("hls", 1)
data = np.random.randn(30)
p=sns.kdeplot(data, shade=True)
x,y = p.get_lines()[0].get_data()
#care with the order, it is first y
#initial fills a 0 so the result has same length than x
cdf = scipy.integrate.cumtrapz(y, x, initial=0)
nearest_05 = np.abs(cdf-0.5).argmin()
x_median = x[nearest_05]
y_median = y[nearest_05]
plt.vlines(x_median, 0, y_median)
plt.show()
Run Code Online (Sandbox Code Playgroud)

| 归档时间: |
|
| 查看次数: |
6604 次 |
| 最近记录: |