为了得到y坐标为distplot的KDE曲线上的点,则可以使用曲线的基础数据。您可以使用该行的get_data
方法从线图获取数据。 然后,您可以在您感兴趣的点上插入数据,使用例如numpy.interp
。
import seaborn.apionly as sns
import numpy as np; np.random.seed(0)
import matplotlib.pyplot as plt
x = 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 curve
yi = np.interp(xi,data_x, data_y)
print ("x={},y={}".format(xi, yi)) # prints x=0,y=0.3698
ax.plot([0],[yi], marker="o")
plt.show()
正在询问有关如何获取该解决方案的评论:
启动的问题。我们有一个distplot,我们想要在它的kde曲线的某个点上绘制一个点。
- 看看文档; distplot函数是否有一个我们想要的参数?不幸的是,
- 该函数是否返回一个对象?是。这是曲线吗?不幸的是,相反,它是一个matplotlib轴。 (发现与
type()
)
- 找出什么是matplotlib轴;阅读the documentation。 Uff,这很重,但我们偶然发现了一种方法
axes.get_lines()
;因为曲线应该是一条线,这应该有所帮助。
- 找出这些行是什么:它们是
Line2D
对象。再次查看文档,我们发现有一种方法get_data
。所以现在我们有曲线的数据。大!
- 在这一点上,如果我们有一个函数可以用我们的x值调用来获得相应的y值,那将会更好。现在看来,我们需要自己去找那个功能。
- 给出
x
和y
曲线的数据,我们如何找到给定x值的y值?由于数据是离散的,我们需要插值。寻找“内插”&“蟒蛇”最终将我们带到numpy.interp
。所以这给我们提供了需要绘制点的坐标。
- 了解如何绘制一个点。那很容易。大量的例子。
就是这样。
这很好。我有一个后续问题。人们如何去了解这一点?或者,你是如何知道这一点的?你有没有遵循的结构化路径,或者这是通过经验获得的辛苦赚取的知识?我是一名经验丰富的程序员,新手到Python,Seaborn更新,但现在已经编程了一段时间。有没有获取这些知识的方法? – Bharat
我更新了答案,以包括从问题描述开始获得解决方案的方式。这可能有助于了解过程。 – ImportanceOfBeingErnest
谢谢你对这个过程的绝佳解释。亲切的问候。巴拉特 – Bharat