Вы можете получить данные (значения x и y), используемые для построения графика распределения.Из этого вы можете интерполировать любые значения между ними.
Если вы хотите получить вероятность, вы должны интегрировать pdf-данные и вычислить значение в диапазоне.
import numpy as np
import seaborn as sns
import scipy
x=np.array([33,42,31,36,36,33, 37 ,37, 28 ,36 ,32, 40 ,43 ,37, 33 ,40 ,41 ,44, 53 ,38, 32, 48, 51, 37 ,29, 41 ,30 ,29 ,28, 40 ,35 ,33 ,33 ,29, 27 ,33, 35, 34, 28 ,35, 39 ,37 ,31 ,33 ,32 ,39 ,24, 30, 29, 21, 28, 28, 29, 29 ,25, 34, 24, 28 ,25, 25 ,27, 18, 27, 27, 35, 26, 29, 29, 30])
ax = sns.distplot(x)
#Value to estimate for
value = 20
#Get the data from the KDE line
xdata, ydata = ax.get_lines()[0].get_data()
#Find the closest point on the curve
idx = (np.abs(xdata-value)).argmin()
#Interpolate to get a better estimate
p = np.interp(value,xdata[idx:idx+2],ydata[idx:idx+2])
print('Point on PDF for X = {} is: {}'.format(value,p))
#Plot the line
ax.vlines(value, 0, p ,colors='r')
#Find the probability for an interval of one (e.g. between 20 and 21)
cdf = scipy.integrate.cumtrapz(ydata, xdata, dx=1, initial=0)
pr = cdf[value+1] - cdf[value]
print('Probability of X <{},{}> is: {}'.format(value,value+1,pr))
# Fill the area
plt.fill_between(xdata,ydata, where = (xdata>=value) & (xdata<=value+1), color='g')
Выходные данные должны быть:
Point on PDF for X = 20 is: 0.007789463075158201
Probability of X <20,21> is: 0.0015438476906999374
Выходной график