2017-04-22 138 views
2

我需要在对应于某些X值的Seaborn distplot上绘制点,以使它们落在密度曲线上或其下方。下面是从以下网址获得distplot: From the Seaborn site - distplot examples对应于给定X值的Python Seaborn Distplot Y值

这里与代码的图像:

enter image description here

因此,例如,在上面显示的情节,我需要以编程方式确定什么是与密度曲线上的0值相对应的Y轴值。从图中看来,它似乎在0.37左右。我怎样才能在我的程序中获得?

假设可以完成,那么如何在显示的图中显示它,即,哪一行代码将显示该图。我正在将一组R可视化转换为Python。在R下面的图显示了什么,我想实现:

enter image description here

见曲线上显示的点?有很多要点值得绘制,但如果你帮我画一个,我可以尝试去做其余的。我是Matplotlib和Seaborn软件包的初始用户。

回答

2

enter image description here

为了得到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曲线的某个点上绘制一个点。

  1. 看看文档; distplot函数是否有一个我们想要的参数?不幸的是,
  2. 该函数是否返回一个对象?是。这是曲线吗?不幸的是,相反,它是一个matplotlib轴。 (发现与type()
  3. 找出什么是matplotlib轴;阅读the documentation。 Uff,这很重,但我们偶然发现了一种方法axes.get_lines();因为曲线应该是一条线,这应该有所帮助。
  4. 找出这些行是什么:它们是Line2D对象。再次查看文档,我们发现有一种方法get_data。所以现在我们有曲线的数据。大!
  5. 在这一点上,如果我们有一个函数可以用我们的x值调用来获得相应的y值,那将会更好。现在看来,我们需要自己去找那个功能。
  6. 给出xy曲线的数据,我们如何找到给定x值的y值?由于数据是离散的,我们需要插值。寻找“内插”&“蟒蛇”最终将我们带到numpy.interp。所以这给我们提供了需要绘制点的坐标。
  7. 了解如何绘制一个点。那很容易。大量的例子。

就是这样。

+0

这很好。我有一个后续问题。人们如何去了解这一点?或者,你是如何知道这一点的?你有没有遵循的结构化路径,或者这是通过经验获得的辛苦赚取的知识?我是一名经验丰富的程序员,新手到Python,Seaborn更新,但现在已经编程了一段时间。有没有获取这些知识的方法? – Bharat

+0

我更新了答案,以包括从问题描述开始获得解决方案的方式。这可能有助于了解过程。 – ImportanceOfBeingErnest

+0

谢谢你对这个过程的绝佳解释。亲切的问候。巴拉特 – Bharat