python - 如何在它选择的 seaborn 分布图中添加一条垂直线?
问题描述
如何在 seaborn dist 图中 y 最大的 x 位置添加一条垂直线?
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
. 对于任何给定的 x 分布,我很想知道如何找到这个值。
解决方案
这是获得更准确点的一种方法。先得到平滑分布函数,用它来提取最大值,然后去掉。
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()
编辑替代解决方案而不使用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
这会导致实际分布而不是密度值
推荐阅读
- xcode - XCODE吊销证书后,Codesign想使用XXX钥匙串
- ibm-integration-bus - 在 IIB 中使用 UDP 中的字段引用
- elasticsearch - 在弹性百分位数内搜索
- css - CSS背景过滤器未在列布局中呈现
- html - 为什么使用这个粘性页脚不起作用?
- php - Webhook 在使用 Stripe CLI 和事件触发器进行调试时测试不一致
- android - 如何将图像索引为二维数组(在 Android 上)?
- javascript - 在 JavaScript 中的单个按钮上使用 addEventListener 和 removeEventListener 两次
- javascript - 如何在运行嵌套的for循环javascript时最小化执行时间
- node.js - node.js 中的两个 http 调用