我需要在一个与某些X值对应的Seaborn distplot上绘制点,这样它们要么落在密度曲线上,要么落在密度曲线下。下面是来自以下URL的distplot:
From the Seaborn site - distplot examples
这是一个带有代码的图像:
python - Python Seaborn Distplot Y值对应于给定的X值-LMLPHP
因此,例如,在上面所示的图中,我需要编程地确定y轴值对应于在密度曲线上的x值的0。从这个数字来看,似乎在0.37左右。我怎样才能在我的程序中得到它呢?
假设可以做到这一点,那么我如何在所示的绘图中显示它,即哪行代码将显示它。我正在将一组R可视化转换为Python。R中的下图显示了我正在努力实现的目标:
python - Python Seaborn Distplot Y值对应于给定的X值-LMLPHP
看到曲线上显示的点了吗?有许多点值要画,但如果你帮我画一个,我可以试着画其余的。我是Matplotlib和Seaborn包的初始用户。

最佳答案

python - Python Seaborn Distplot Y值对应于给定的X值-LMLPHP
为了获得distplot的kde曲线上某个点的y坐标,可以使用该曲线的基础数据。您可以使用测线的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。现在我们有了曲线的数据。伟大的!
在这一点上,如果我们有一个函数,我们可以调用我们的x值来接收相应的y值,那就更好了。现在看来,我们需要自己找到这个功能。
那么给定曲线的get_datax数据,我们如何找到给定x值的y值?由于数据是离散的,我们需要插值。四处寻找“interpolate”和“python”最终会让我们找到y。这就为我们提供了画一个点所需的坐标。
找出如何画一个点。那很简单。很多这样的例子。
就这样。

09-30 21:19