如何在 kdeplot 上绘制 0 和均值 y 值之间的均值线

2023-12-21

我有一个分布图,我想绘制一条从 0 到平均频率 y 值的平均线。我想做这个 https://stackoverflow.com/questions/51417483/mean-median-mode-lines-showing-only-in-last-graph-in-seaborn/51417635,但当 distplot 停止时,让该行停止。为什么没有一个简单的参数可以做到这一点?这将非常有用。

我有一些代码可以帮助我实现目标:

plt.plot([x.mean(),x.mean()], [0, *what here?*])

这段代码按照我的意愿绘制了一条线,除了我想要的 y 值。让 y max 停止在分布图中平均值的频率处的正确数学是什么?下面是我的分布图之一的示例,使用 0.6 作为 y-max。如果有一些数学方法让它停在平均值的 y 值上,那就太棒了。我尝试过将平均值除以计数等。


Update对于最新版本的 matplotlib (3.3.4)和海博恩(0.11.1): kdeplot 与shade=True现在不再创建线条对象。为了获得与之前相同的结果,设置shade=False仍会创建线条对象。然后可以将曲线填充为ax.fill_between()。下面的代码进行了相应的更改。 (使用修订记录 https://stackoverflow.com/posts/63309583/revisions查看旧版本。)

ax.lines[0]获取kde的曲线,您可以从中提取x和y数据。np.interp然后可以找到给定 x 值的曲线高度:

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

x = np.random.normal(np.tile(np.random.uniform(10, 30, 5), 50), 3)
ax = sns.kdeplot(x, shade=False, color='crimson')
kdeline = ax.lines[0]
mean = x.mean()
xs = kdeline.get_xdata()
ys = kdeline.get_ydata()
height = np.interp(mean, xs, ys)
ax.vlines(mean, 0, height, color='crimson', ls=':')
ax.fill_between(xs, 0, ys, facecolor='crimson', alpha=0.2)
plt.show()

可以扩展相同的方法来显示平均值和标准差,或中位数和四分位数:

import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np

x = np.random.normal(np.tile(np.random.uniform(10, 30, 5), 50), 3)
fig, axes = plt.subplots(ncols=2, figsize=(12, 4))
for ax in axes:
    sns.kdeplot(x, shade=False, color='crimson', ax=ax)
    kdeline = ax.lines[0]
    xs = kdeline.get_xdata()
    ys = kdeline.get_ydata()
    if ax == axes[0]:
        middle = x.mean()
        sdev = x.std()
        left = middle - sdev
        right = middle + sdev
        ax.set_title('Showing mean and sdev')
    else:
        left, middle, right = np.percentile(x, [25, 50, 75])
        ax.set_title('Showing median and quartiles')
    ax.vlines(middle, 0, np.interp(middle, xs, ys), color='crimson', ls=':')
    ax.fill_between(xs, 0, ys, facecolor='crimson', alpha=0.2)
    ax.fill_between(xs, 0, ys, where=(left <= xs) & (xs <= right), interpolate=True, facecolor='crimson', alpha=0.2)
    # ax.set_ylim(ymin=0)
plt.show()

PS:kde的模式:

    mode_idx = np.argmax(ys)
    ax.vlines(xs[mode_idx], 0, ys[mode_idx], color='lime', ls='--')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 kdeplot 上绘制 0 和均值 y 值之间的均值线 的相关文章

随机推荐

  • 如何在C#中获取TPL任务线程的引用?

    当我创建任务时 Task task Task Factory StartNew gt someMethod args 在 C 4 0 中 如何获取此任务的线程的引用 该任务是否有可能在创建该任务的同一个线程中执行或生成多个线程 Update
  • 与 Redux 反应?那么“背景”问题呢?

    我通常在 Stack 上发布与代码相关的内容 但这更多的是关于社区总体想法的问题 似乎有很多人提倡使用 Redux 和 React 来管理数据 状态 但是在阅读和学习两者时 我发现了一些看起来不太正确的东西 Redux 在此页面底部 htt
  • 如何获取datagrid列绑定的字段?

    在我的 xaml 中 我修改了每个列标题以包含一个按钮 对于命令参数 我想使用列的数据字段名称 而不是标题内容 例如 我想要 JOB TITLE 而不是标题内容的 职位名称 对于标题内容我会使用
  • 在 VSTS 中创建 Kubernetes 端点会生成错误

    设置新的 Kubernetes 端点并单击 验证连接 时出现错误消息 Kubconfig 不包含用户字段 请检查 kubeconfig 始终显示 尝试了多种输出配置文件的方法均无效 我还从网上复制并粘贴了许多示例配置文件 但最终都遇到了相同
  • Google 表格当前用户

    我希望你能帮助我 我希望在单元格中显示 google 工作表的当前用户以进行 vlookup 我添加了一个脚本来将登录的用户名拉入脚本库 但我无法将 logger log 信息转储到 google 工作表中 任何信息都会很棒 谢谢 奈杰尔
  • 无法使用 Elixir 连接到远程 SSH 服务器

    我已经尝试使用 elixir 连接到远程 ssh 服务器一段时间了 这就是我在 IEX 中所做的 Macintosh elixir logglycious master gt iex 15 07 20 0 11 Erlang OTP 17
  • 应用程序的启动时间

    在android中启动应用程序并计算其启动时间的最佳方法是什么 如果可以用一些代码完成 那就更好了 嗯 首先 更准确地说 我应该指出 在 Android 中 您启动的是 Activity 而不是应用程序 因此 由于应用程序的入口点是处理 L
  • 无法在 .NET standard 2 项目中使用实体框架

    如何在 NET Standard 项目中使用实体框架或类似的东西 NET Standard 2 似乎不支持 EF 这真的很烦人 所以我尝试使用 Microsoft EntityFrameworkCore SqlServer 和 icroso
  • 我可以使用 Razor Intellisense 查看 .html 文件,就好像它们是 Visual Studio 2010 中的 .cshtml 文件一样吗?

    我已经让 Net MVC3 来处理 html 和其他自定义扩展 就像处理 cshtml 文件一样 但 VS2010 不会突出显示 Razor 语法或显示它的 Intellisense 如何让 VS2010 将 html 文件识别为 csht
  • 使用 VS 2015 Professional 创建无需管理员权限即可运行的安装程序

    我正在尝试创建一个无需管理员权限即可运行的安装文件 MSI 为此 我尝试了以下选项 我已经设置了安装所有用户财产给false如下 还设置了安装所有用户可见 to false 我还更改了默认位置 应用程序数据文件夹 更改上述属性后 仍然需要管
  • 如何重新启动用 Delphi 编写的 Windows 服务应用程序?

    我有一个用 Delphi 编写的 Windows 服务 它使用的第三方资源之一偶尔会被损坏 我发现解决这种情况的唯一方法是退出并重新启动程序 我可以从程序内部检测到资源何时损坏 并且可以告诉 Windows 在服务停止后重新启动该服务 但我
  • 新的 ViewController 导致黑屏

    我通过界面生成器添加新的视图控制器 场景 我将它们放在画布上 然后创建一个新的视图控制器子类 NewViewController 这会创建两个文件 NewViewController h and NewViewController m 然后
  • 通知用户应用程序商店中应用程序的新更新作为警报并自动在 iPhone 中安装更新版本?

    目前我的应用程序版本 1 1 可以在应用程序商店中找到 当前情况 当我更新新版本时 当用户访问应用程序商店时 更新会显示在应用程序商店中 必需的 一旦用户启动应用程序警报 就会弹出 如果应用程序商店中有新版本 它应该如果用户单击 确定 则自
  • 从应用程序内部调用地图获取路线 - iOS 5 iOS 6

    这是一个奇怪的问题 我的应用程序应该能够调用 iOS 中的内置地图 5 1 和 6 事实证明 它在iOS6下工作得很好 但在iOS5 1下却不行 iOS6 中的地图被调用 并跟踪从saddr 到daddr 的方向 但是当我在iOS5 中时
  • JDK 似乎已安装,但未检测到且命令不起作用

    我家里刚买了一台新电脑 我整晚都在尝试在我的 Windows 7 64 位机器上安装 JDK 8u11 我知道我下载了正确的 64 位版本 我知道我的计算机上已经安装了 JRE 因为java version回报java version 1
  • 无法在 Windows 上安装 pylibmc

    我尝试在 Windows 10 计算机上使用 pip install pylibmc 安装 pylibmc 但出现以下错误 我需要知道是否有任何方法可以在 Windows 10 上安装 libmemcached 因为我需要安装需要 libm
  • exif数据中没有方向 - PHP图像上传

    一直在尝试检测从 iPhone 上传的图像的图像方向 然后据此调整它们的方向 我正在尝试解决以肖像拍摄的图像以 90 度旋转上传的问题 我尝试了许多不起作用的 switch 语句 因此决定在 JSON 返回中返回 exif 数据 我看到的问
  • 在 mongodb C# 驱动程序中设置 DateTimeSerializationOptions.Defaults 的新方法是什么?

    我正在使用这一行来设置日期时间默认值 DateTimeSerializationOptions Defaults DateTimeSerializationOptions LocalInstance 我收到这个警告 MongoDB Bson
  • 为什么静态类被视为“类”和“引用类型”?

    我今天一直在思考 C 和 CIL 类型系统 并且开始想知道为什么静态类被视为类 在很多方面它们并不是真正的类 普通 类可以包含非静态成员 而静态类则不能 在这方面 类更类似于struct与静态类相比 结构体具有单独的名称 您可以引用 普通
  • 如何在 kdeplot 上绘制 0 和均值 y 值之间的均值线

    我有一个分布图 我想绘制一条从 0 到平均频率 y 值的平均线 我想做这个 https stackoverflow com questions 51417483 mean median mode lines showing only in