pandas - 在 Seaborn 中的 distplot 或 kdeplot 的平均峰值处绘制一个点
问题描述
我有兴趣在分布的平均峰值上方自动绘制一个点,由 kdeplot 或带有 kde 的 distplot 表示。手动绘制点和线很简单,但我很难得出这个最大坐标点。
例如,下面生成的 kdeplot 应该在 (3.5, 1.0) 左右绘制一个点:
iris = sns.load_dataset("iris")
setosa = iris.loc[iris.species == "setosa"]
sns.kdeplot(setosa.sepal_width)
这个问题的最终目标是在下一个峰值(一个图中的两个分布)上画一条线,上面印有 t 统计量。
解决方案
这是一种方法。这里的想法是首先提取图中线对象的 x 和 y 数据。然后,获取峰值的 id,最后绘制对应于分布峰值的单个 (x,y) 点。
import numpy as np
import seaborn as sns
iris = sns.load_dataset("iris")
setosa = iris.loc[iris.species == "setosa"]
ax = sns.kdeplot(setosa.sepal_width)
x = ax.lines[0].get_xdata() # Get the x data of the distribution
y = ax.lines[0].get_ydata() # Get the y data of the distribution
maxid = np.argmax(y) # The id of the peak (maximum of y data)
plt.plot(x[maxid],y[maxid], 'bo', ms=10)
推荐阅读
- java - 使用 BottomNavigationView 时仅加载一次数据
- javascript - 无法从节点js中的函数返回数据
- testing - InvalidUseOfMatchersException:参数匹配器的使用无效
- apache-spark - SparkSql 查询以从 cassandra 获取定义值的上一行和下一行
- javascript - Vuetify v-select onchange 事件返回之前选择的值而不是当前值
- angular - Conditional duplicate templateref in ng-content with selector
- python - Transforming data from Pandas dataframe to time series training data for keras LSTM
- javascript - 如何遍历路径元素并一个接一个地为每个元素设置动画?
- angularjs - GulpUglifyError:无法缩小 JavaScript 原因:SyntaxError:意外的标记名称«k»,预期的标点符号«;»
- sip - SIP Redirect Server