Как я могу добавить вертикальную линию на участок морского побережья, где он выбирает? - PullRequest
0 голосов
/ 14 июня 2019

Как я могу добавить вертикальную линию в точке x, в которой y находится на максимуме на расстоянии от моря?

import seaborn as sns, numpy as np
sns.set(); np.random.seed(0)
x = np.random.randn(5000)
ax = sns.distplot(x, kde = False)

PS_ В приведенном выше примере мы знаем, что это, вероятно,выбрать на 0.Мне интересно знать, как я могу найти это значение в целом, для любого данного распределения х.

1 Ответ

1 голос
/ 14 июня 2019

Это один из способов получить более точную оценку. Сначала получите функцию плавного распределения, используйте ее, чтобы извлечь максимумы, а затем удалите ее.

import seaborn as sns, numpy as np
import matplotlib.pyplot as plt
sns.set(); np.random.seed(0)
x = np.random.randn(5000)
ax = sns.distplot(x, kde = True)

x = ax.lines[0].get_xdata()
y = ax.lines[0].get_ydata()
plt.axvline(x[np.argmax(y)], color='red')
ax.lines[0].remove()

enter image description here

Редактировать Альтернативное решение без использования kde=True

import seaborn as sns, numpy as np
from scipy import stats
import matplotlib.pyplot as plt

sns.set(); np.random.seed(0)
x = np.random.randn(5000)
ax = sns.distplot(x, kde = False)

kde = stats.gaussian_kde(x) # Compute the Gaussian KDE
idx = np.argmax(kde.pdf(x)) # Get the index of the maximum
plt.axvline(x[idx], color='red') # Plot a vertical line at corresponding x

В результате получается фактическое распределение, а не значения плотности.

enter image description here

...