为了获得distplot的kde曲线上某个点的y坐标,可以使用曲线的基础数据。您可以使用折线
get_data方法从折线图中获取数据。然后,您可以使用例如在感兴趣的点上插值数据
numpy.interp。
import seaborn.apionly as snsimport numpy as np; np.random.seed(0)import matplotlib.pyplot as pltx = np.random.randn(100)ax = sns.distplot(x, hist_kws={"ec":"k"})data_x, data_y = ax.lines[0].get_data()xi = 0 # coordinate where to find the value of kde curveyi = np.interp(xi,data_x, data_y)print ("x={},y={}".format(xi, yi)) # prints x=0,y=0.3698ax.plot([0],[yi], marker="o")plt.show()在评论中被询问如何获得此解决方案:
从问题开始。我们有一个分布图,我们想在其kde曲线的某个点上绘制一个点。
- 查看文档;distplot函数是否具有我们想要的参数?不幸的是没有。
- 函数是否返回对象?是。是曲线吗?不幸的是没有。相反,它是一个matplotlib轴。(通过找出
type()
) - 找出什么是matplotlib轴;阅读文档。乌夫,它很重,但是我们偶然发现了一种方法
axes.get_lines()
;因为曲线应该是一条线,所以应该有所帮助。 - 找出这些行是什么:它们是
Line2D
对象。再次查看文档,我们发现有一种方法get_data
。所以现在我们有了曲线的数据。大! - 此时,如果我们有一个函数可以调用x值来接收相应的y值,那就更好了。现在看来,我们需要自己找到该功能。
- 因此,考虑
x
与y
曲线的数据,我们如何找到一个给定的x值的y值?由于数据是离散的,因此我们需要进行插值。寻找“ interpolate”和“ python”最终将我们带到numpy.interp
。因此,这为我们提供了绘制点所需的坐标。 - 了解如何绘制点。那很容易。周围有很多例子。
而已。



