我需要在Seaborn distplot上绘制对应于某些X值的点,使得它们落在密度曲线上或低于它。以下是来自以下网址的情景: From the Seaborn site - distplot examples
以下是带有代码的图片:
因此,例如,在上面显示的图中,我需要以编程方式确定对应于落在密度曲线上的X值0的Y轴值。从图中可以看出它大约在0.37左右。我怎样才能在我的程序中获得它?
假设可以完成,那么我如何在所显示的图中显示它,即代码行将显示哪一行。我正在将一组R可视化翻译成Python。 R中的下图显示了我想要实现的目标:
查看曲线上显示的点数?有很多要点值,但如果你帮我画一个,我可以尝试做其余的事。我是Matplotlib和Seaborn软件包的初级用户。
答案 0 :(得分:4)
为了获得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曲线上的某个点绘制一个点。
type()
)axes.get_lines()
;因为曲线应该是一条线,这应该有帮助。Line2D
个对象。再看文档,我们发现有一个方法get_data
。所以现在我们得到了曲线的数据。太好了!x
和y
数据,我们如何找到给定x值的y值?由于数据是离散的,我们需要进行插值。四处寻找&#34;插入&#34; &安培; &#34;蟒&#34;最终将我们带到numpy.interp
。因此,这为我们提供了绘制点所需的坐标。 那就是它。