当前位置: 首页 > 面试题库 >

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

竺辉
2023-03-14
问题内容

我需要在Seaborn distplot上绘制与某些X值相对应的点,以使它们落在密度曲线上或低于密度曲线。这是来自以下URL的distplot:
从Seaborn网站-distplot示例

因此,例如,在上面显示的曲线图中,我需要以编程方式确定与落在密度曲线上的X值0对应的Y轴值是多少。从图中看来,它大约在0.37左右。如何在我的程序中得到它?

假设可以做到,那么我如何在所示的图中显示它,即,哪一行代码可以显示出来。我正在将一组R可视化转换为Python。

看到曲线上显示的点了吗?有许多要绘制的点值,但是如果您帮助我绘制一个点值,我可以尝试进行其余操作。我是Matplotlib和Seaborn软件包的初学者。


问题答案:

为了获得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()

在评论中被询问如何获得此解决方案:

从问题开始。我们有一个分布图,我们想在其kde曲线的某个点上绘制一个点。

  1. 查看文档;distplot函数是否具有我们想要的参数?不幸的是没有。
  2. 函数是否返回对象?是。是曲线吗?不幸的是没有。相反,它是一个matplotlib轴。(通过找出type()
  3. 找出什么是matplotlib轴;阅读文档。乌夫,它很重,但是我们偶然发现了一种方法axes.get_lines();因为曲线应该是一条线,所以应该有所帮助。
  4. 找出这些行是什么:它们是Line2D对象。再次查看文档,我们发现有一种方法get_data。所以现在我们有了曲线的数据。大!
  5. 此时,如果我们有一个函数可以调用x值来接收相应的y值,那就更好了。现在看来,我们需要自己找到该功能。
  6. 因此,考虑xy曲线的数据,我们如何找到一个给定的x值的y值?由于数据是离散的,因此我们需要进行插值。寻找“ interpolate”和“ python”最终将我们带到numpy.interp。因此,这为我们提供了绘制点所需的坐标。
  7. 了解如何绘制点。那很容易。周围有很多例子。

而已。



 类似资料:
  • 问题内容: 我想检查一个是否包含一个具有特定值的字段的对象。现在,我可以使用一个循环来检查,但是我很好奇是否有更高效的代码。 类似的东西; 我知道上面的代码什么也做不了,只是为了大致演示一下我要实现的目标。 另外,为了澄清,我不想使用简单循环的原因是,这段代码当前将进入一个位于循环内的循环内。为了可读性,我不想一直在这些循环中添加循环。所以我想知道是否有简单的替代方案。 问题答案: Streams

  • 我想检查是否包含一个对象,该对象具有一个具有特定值的字段。现在,我可以使用一个循环来进行检查,但我很好奇是否有更高效的代码。 类似的东西; 我知道上面的代码没有做任何事情,它只是大致演示我正在尝试实现的东西。 另外,为了澄清一下,我不想使用简单循环的原因是,这段代码当前将在循环中运行,循环中的循环中的循环中的循环中的循环中的循环中的循环中的循环中的循环中的循环中的循环中的循环中的循环中的循环。为了

  • 我在JPA repository类中编写了一个查询,如下所示: 上述查询的问题是,如果参数:和都为空,则需要获取所有记录,而这不会发生。到目前为止,没有获取任何记录。 基本上,我希望编写的查询能够正确地适用于所有情况,即参数和都采用空值和非空值。 在这方面,我已经了解了CriteriaBuilder的概念,但无法正确掌握该概念以实现我的案例。 有人能帮忙吗?谢谢 编辑 我已经在控制台中记录了查询,

  • 例如 然后对于每一行,我会找到大于另一个数组中相应值的值的数量,比如b=np。数组([2,1,0]),预期结果是数组[1,1,3](第一行,一个大于2的数字,第二行,一位大于1的数字,以及第三行三个大于0的数字)。 有没有办法使用numpy内置方法来实现这一点?非常感谢!

  • 基于 cocos2d-x 编写的对对碰游戏。即三个相同图案排成一行的时候就会消去。 [Code4App.com]

  • 问题内容: 我有一个像 如何检查此数组以查看Magenic是否存在?除非必须,否则我不想循环播放。我正在处理几千条记录。 更新 由于这是一个受欢迎的帖子,所以我想分享一些新发现。看来@CAFxX已经分享了!我应该更经常阅读这些内容。 借助 ECMAScript 2015 ,使用新的箭头功能甚至更加简单: 问题答案: 2018 edit :这个答案来自2011,当时浏览器没有广泛支持数组过滤方法和箭