Python Seaborn Distplot Y值对应于给定的X值

时间:2017-04-22 23:50:02

标签: python matplotlib plot point seaborn

我需要在Seaborn distplot上绘制对应于某些X值的点,使得它们落在密度曲线上或低于它。以下是来自以下网址的情景: From the Seaborn site - distplot examples

以下是带有代码的图片:

enter image description here

因此,例如,在上面显示的图中,我需要以编程方式确定对应于落在密度曲线上的X值0的Y轴值。从图中可以看出它大约在0.37左右。我怎样才能在我的程序中获得它?

假设可以完成,那么我如何在所显示的图中显示它,即代码行将显示哪一行。我正在将一组R可视化翻译成Python。 R中的下图显示了我想要实现的目标:

enter image description here

查看曲线上显示的点数?有很多要点值,但如果你帮我画一个,我可以尝试做其余的事。我是Matplotlib和Seaborn软件包的初级用户。

1 个答案:

答案 0 :(得分:4)

enter image description here

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

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