如何使用 sns.boxplot 或 sns.catplot 添加剖面线到箱线图

2023-12-21

I need to add hatches to a categorical box plot. What I have is this: enter image description here

我需要的是这样的(带有中线):

我尝试过的是这段代码:

exercise = sns.load_dataset("exercise")
g = sns.catplot(x="time", y="pulse", hue="kind", data=exercise, kind="box")
bars = g.axes[0][0].patches
hatches=['//','..','xx','//','..','xx','//','..','xx']
for pat,bar in zip(hatches,bars):
    bar.set_hatch(pat)

这只会生成第一个数字。第 3-6 行的想法来自这个问题 https://stackoverflow.com/questions/64340226/plot-a-stacked-bar-plot-in-seaborn-with-hatching。但想法得到axes[0][0]第 3 行来自这个问题 https://stackoverflow.com/questions/59250699/how-to-add-percentages-on-top-of-bars-in-seaborn-facetgrid.

因为 FacetGrid 没有补丁或容器等属性,所以很难将单个图中的影线答案适应分类图,所以我无法弄清楚。

其他无效的审查问题:

  • 箱线图中方框的面图案 https://stackoverflow.com/q/28740234/7758804

  1. 迭代每个子图/FacetGridfor ax in g.axes.flat:.
  2. ax.patches包含matplotlib.patches.Rectangle and matplotlib.patches.PathPatch,因此必须使用正确的。
  • Caveat: all hues must appear for each group in each Facet, otherwise the patches and hatches will not match.
    • 在这种情况下,可能需要手动或条件代码才能正确确定h, so zip(patches, h) works.
  • 测试于python 3.10, pandas 1.4.2, matplotlib 3.5.1, seaborn 0.11.2
import matplotlib as mpl
import seaborn as sns

# load test data
exercise = sns.load_dataset("exercise")

# plot
g = sns.catplot(x="time", y="pulse", hue="kind", data=exercise, col='diet', kind="box")

# hatches must equal the number of hues (3 in this case)
hatches = ['//', '..', 'xx']

# iterate through each subplot / Facet
for ax in g.axes.flat:

    # select the correct patches
    patches = [patch for patch in ax.patches if type(patch) == mpl.patches.PathPatch]
    # the number of patches should be evenly divisible by the number of hatches
    h = hatches * (len(patches) // len(hatches))
    # iterate through the patches for each subplot
    for patch, hatch in zip(patches, h):
        patch.set_hatch(hatch)
        fc = patch.get_facecolor()
        patch.set_edgecolor(fc)
        patch.set_facecolor('none')
  • 添加以下内容以更改图例。
for lp, hatch in zip(g.legend.get_patches(), hatches):
    lp.set_hatch(hatch)
    fc = lp.get_facecolor()
    lp.set_edgecolor(fc)
    lp.set_facecolor('none')

  • 如果仅使用轴级别sns.boxplot,无需迭代多个轴。
ax = sns.boxplot(x="time", y="pulse", hue="kind", data=exercise)

# select the correct patches
patches = [patch for patch in ax.patches if type(patch) == mpl.patches.PathPatch]
# the number of patches should be evenly divisible by the number of hatches
h = hatches * (len(patches) // len(hatches))
# iterate through the patches for each subplot
for patch, hatch in zip(patches, h):
    patch.set_hatch(hatch)
    fc = patch.get_facecolor()
    patch.set_edgecolor(fc)
    patch.set_facecolor('none')

l = ax.legend()
    
for lp, hatch in zip(l.get_patches(), hatches):
    lp.set_hatch(hatch)
    fc = lp.get_facecolor()
    lp.set_edgecolor(fc)
    lp.set_facecolor('none')

  • To keep the facecolor of the box plots:
    1. Remove patch.set_facecolor('none')
    2. 将边缘颜色设置为'k'(黑色)代替fc, patch.set_edgecolor('k').
    • 适用于sns.catplot代码也。
ax = sns.boxplot(x="time", y="pulse", hue="kind", data=exercise)

# select the correct patches
patches = [patch for patch in ax.patches if type(patch) == mpl.patches.PathPatch]
# the number of patches should be evenly divisible by the number of hatches
h = hatches * (len(patches) // len(hatches))
# iterate through the patches for each subplot
for patch, hatch in zip(patches, h):
    patch.set_hatch(hatch)
    patch.set_edgecolor('k')
    
l = ax.legend()
    
for lp, hatch in zip(l.get_patches(), hatches):
    lp.set_hatch(hatch)
    lp.set_edgecolor('k')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 sns.boxplot 或 sns.catplot 添加剖面线到箱线图 的相关文章

  • 使用Python开发Web应用程序

    我一直在用 python 做一些工作 但这都是针对独立应用程序的 我很想知道 python 的任何分支是否支持 Web 开发 有人还会建议一个好的教程或网站吗 我可以从中学习一些使用 python 进行 Web 开发的基础知识 既然大家都说
  • 使用 openCV 对图像中的子图像进行通用检测

    免责声明 我是计算机视觉菜鸟 我看过很多关于如何在较大图像中查找特定子图像的堆栈溢出帖子 我的用例有点不同 因为我不希望它是具体的 而且我不确定如何做到这一点 如果可能的话 但我感觉应该如此 我有大量图像数据集 有时 其中一些图像是数据集的
  • DreamPie 不适用于 Python 3.2

    我最喜欢的 Python shell 是DreamPie http dreampie sourceforge net 我想将它与 Python 3 2 一起使用 我使用了 添加解释器 DreamPie 应用程序并添加了 Python 3 2
  • Python 多处理示例不起作用

    我正在尝试学习如何使用multiprocessing但我无法让它发挥作用 这是代码文档 http docs python org 2 library multiprocessing html from multiprocessing imp
  • Spark的distinct()函数是否仅对每个分区中的不同元组进行洗牌

    据我了解 distinct 哈希分区 RDD 来识别唯一键 但它是否针对仅移动每个分区的不同元组进行了优化 想象一个具有以下分区的 RDD 1 2 2 1 4 2 2 1 3 3 5 4 5 5 5 在此 RDD 上的不同键上 所有重复键
  • 为 pandas 数据透视表中的每个值列定义 aggfunc

    试图生成具有多个 值 列的数据透视表 我知道我可以使用 aggfunc 按照我想要的方式聚合值 但是如果我不想对两列求和或求平均值 而是想要一列的总和 同时求另一列的平均值 该怎么办 那么使用 pandas 可以做到这一点吗 df pd D
  • 在循环中每次迭代开始时将变量重新分配给原始值(在循环之前定义)

    在Python中 你使用 在每次迭代开始时将变量重新分配给原始值 在循环之前定义 时 也就是说 original 1D o o o for i in range 0 3 new original 1D revert back to orig
  • 在 NumPy 中获取 ndarray 的索引和值

    我有一个 ndarrayA任意维数N 我想创建一个数组B元组 数组或列表 其中第一个N每个元组中的元素是索引 最后一个元素是该索引的值A 例如 A array 1 2 3 4 5 6 Then B 0 0 1 0 1 2 0 2 3 1 0
  • IRichBolt 在storm-1.0.0 和 pyleus-0.3.0 上运行拓扑时出错

    我正在运行风暴拓扑 pyleus verbose local xyz topology jar using storm 1 0 0 pyleus 0 3 0 centos 6 6并得到错误 线程 main java lang NoClass
  • Abaqus 将曲面转化为集合

    我一直试图在模型中找到两个表面的中心 参见照片 但未能成功 它们是元素表面 面 查询中没有选项可以查找元素表面的中心 只能查找元素集的中心 找到节点集的中心也很好 但是我的节点集没有出现在工具 gt 查询 gt 质量属性选项中 而且我找不到
  • 当玩家触摸屏幕一侧时,如何让 pygame 发出警告?

    我使用 pygame 创建了一个游戏 当玩家触摸屏幕一侧时 我想让 pygame 给出类似 你不能触摸屏幕两侧 的错误 我尝试在互联网上搜索 但没有找到任何好的结果 我想过在屏幕外添加一个方块 当玩家触摸该方块时 它会发出警告 但这花了很长
  • 使用 OpenPyXL 迭代工作表和单元格,并使用包含的字符串更新单元格[重复]

    这个问题在这里已经有答案了 我想使用 OpenPyXL 来搜索工作簿 但我遇到了一些问题 希望有人可以帮助解决 以下是一些障碍 待办事项 我的工作表和单元格数量未知 我想搜索工作簿并将工作表名称放入数组中 我想循环遍历每个数组项并搜索包含特
  • 表达式中的 Python 'in' 关键字与 for 循环中的比较 [重复]

    这个问题在这里已经有答案了 我明白什么是in运算符在此代码中执行的操作 some list 1 2 3 4 5 print 2 in some list 我也明白i将采用此代码中列表的每个值 for i in 1 2 3 4 5 print
  • 如何将 numpy.matrix 提高到非整数幂?

    The 运算符为numpy matrix不支持非整数幂 gt gt gt m matrix 1 0 0 5 0 5 gt gt gt m 2 5 TypeError exponent must be an integer 我想要的是 oct
  • ExpectedFailure 被计为错误而不是通过

    我在用着expectedFailure因为有一个我想记录的错误 我现在无法修复 但想将来再回来解决 我的理解expectedFailure是它会将测试计为通过 但在摘要中表示预期失败的数量为 x 类似于它如何处理跳过的 tets 但是 当我
  • 循环中断打破tqdm

    下面的简单代码使用tqdm https github com tqdm tqdm在循环迭代时显示进度条 import tqdm for f in tqdm tqdm range 100000000 if f gt 100000000 4 b
  • 如何在 Django 中使用并发进程记录到单个文件而不使用独占锁

    给定一个在多个服务器上同时执行的 Django 应用程序 该应用程序如何记录到单个共享日志文件 在网络共享中 而不保持该文件以独占模式永久打开 当您想要利用日志流时 这种情况适用于 Windows Azure 网站上托管的 Django 应
  • 在python中,如何仅搜索所选子字符串之前的一个单词

    给定文本文件中的长行列表 我只想返回紧邻其前面的子字符串 例如单词狗 描述狗的单词 例如 假设有这些行包含狗 hotdog big dog is dogged dog spy with my dog brown dogs 在这种情况下 期望
  • 如何使用google colab在jupyter笔记本中显示GIF?

    我正在使用 google colab 想嵌入一个 gif 有谁知道如何做到这一点 我正在使用下面的代码 它并没有在笔记本中为 gif 制作动画 我希望笔记本是交互式的 这样人们就可以看到代码的动画效果 而无需运行它 我发现很多方法在 Goo
  • 协方差矩阵的对角元素不是 1 pandas/numpy

    我有以下数据框 A B 0 1 5 1 2 6 2 3 7 3 4 8 我想计算协方差 a df iloc 0 values b df iloc 1 values 使用 numpy 作为 cov numpy cov a b I get ar

随机推荐

  • 自定义Android Webview类

    我正在编写一个 Android 应用程序 android 2 3 3 API 10 我通过 WebView 加载网站 查看android webkit webview源码 具体是onSavePassword 可以找到HERE http gr
  • Apache 不生成 404

    如果我有 faq php在服务器上也可以通过以下方式访问 faq php nonexistant gif为什么 我已确保多视图已禁用 为什么内容 faq php当我访问 URI 时显示 faq php randomstuff gif 仅供参
  • 在焦点上打开 jQuery UI ComboBox

    我有一个 jQuery ComboBox 输入 当聚焦时我想自动打开自动完成菜单 但是 只需清除输入并将其聚焦 如下所示 select id val focus 不起作用 如果您手动聚焦自动完成输入然后将其清除 它会显示自动完成菜单 有没有
  • Flutter:将整数列表转换为一个衬里中的字符串列表

    我试图将 JSON 解析为我的对象 json 的一个字段包含 1 2 3 4 它是一个 int 列表 但我的对象字段包含List
  • 如何使用 KaTeX 渲染 $..$ 中的所有内联公式?

    所以我想要 KaTeX 内联公式 就像 MathJax 一样 但到目前为止我只发现render 将字符串 绘制 到元素的函数 我需要修改 DOM 中文本节点的一部分 我真的找不到如何用 KaTeX 做到这一点 有这样的功能吗 MathJax
  • 将 media_ids 添加到 Twitter API 调用会导致身份验证问题

    我有一个简单的网页 可以通过 Twitter REST API 创建纯文本推文 https api twitter com 1 1 statuses update json https api twitter com 1 1 statuse
  • 完全卸载 VS Code 扩展

    自最新版本的 VS Code 以来 每当打开 C 文件时都会出现错误 我已经安装了由 OmniSharp 提供支持的 csharp 语言扩展 这是我得到的错误 我尝试卸载扩展并重新安装它 同样的问题 我完全卸载了该应用程序并重新安装了它 但
  • 在 Android 中获取我拨打的号码

    我需要以编程方式从 Android 设备获取正在拨打的号码 我现在正在做的事情如下 我听android intent action PHONE STATE被广播意味着我正在被呼叫或正在呼叫 或接收短信等 In a BroadcastRece
  • XML 和 JSON Web api:从 POJO 自动映射?

    我即将开始一个小项目 其目标是最终得到一个 Web xml json api 我将用 Java 编写它 并使用 Restlet 库 如何处理 xml json 二元性 我知道我可以使用 JAXB 将 pojos 转换 为 xml 并返回 但
  • 在 python 正则表达式中使用 OR 的最佳方法是什么

    我正在做关于正则表达式的作业 并且遇到一些困难OR 给定以下字符串 avc7fsrd5vcc12vfscsrwt1qw7eetrs fsrsy 应该返回 t1 s fdjhads jhf 5672t3zcxvb m654godjhfjdye
  • 无法签入 TFS 并使用持续集成进行构建'

    我昨天将一个 Azure Web 应用程序签入 TFS 没有出现任何问题 签入后 资源管理器将注入我们的 nuget 包 如果构建成功则进行部署 I made a few changes added a class and checked
  • 将示例项目导入到eclipse中

    我知道这可能是一个菜鸟问题 但我以前没有这样做过 如何导入 android 示例项目 例如 https developer android com training location retrieve current html https
  • 将 Uncrustify 与 VIM 结合使用

    在我的 vimrc 中 我通过以下命令调用 Uncrustify uncrustify l CPP c D uncrustify default cfg 之后在一些代码上我收到一个 Windows Fatal 错误 但是当我使用 f 选项在
  • Liquibase 多个变更日志执行

    我在用着SpringLiquibase对于 liquibase 配置 以下配置适用于单个变更日志文件 sql 格式 Configuration Slf4j public class LiquibaseConfiguration Inject
  • 通过 SSIS 上传之前验证数据

    我有一个 SSIS 包 用于将 Excel 文件中的数据上传到 Sql Server 2005 表中 Excel 文件将包含 20k 30k 行范围内的不同行数据 当所有数据正确时 上传工作正常 但当即使在单行中出现小问题时 显然也会失败
  • 将 JavaScript 对象进行 AND 运算

    我在我们的应用程序中遇到了这段代码 已修改 并对它的工作原理感到困惑 function someObject this someProperty this foo bar baz function return Huh this getVa
  • Spark 结构化流 - 由于输入源数量增加而导致检查点中出现断言错误

    我正在尝试将两个流合并为一个并将结果写入一个主题 代码 1 阅读两个主题 val PERSONINFORMATION df DataFrame spark readStream format kafka option kafka boots
  • 提高重叠片段可视化的性能

    我有一组 x 点对 用于沿 x 轴绘制线段 以在 R 中创建自定义读取映射 绘制这些线段的一半任务是确定它们的 y 位置 以便没有两个重叠的线段位于同一 y 水平上 对于每个段 我从第一个位置迭代 y 个级别 直到到达尚未包含与当前段重叠的
  • Angularjs ng-单击重复表行不起作用

    在 AngularJS 中 ng click 以下 HTML 对我不起作用 tr td ai name td td ai desc td tr 我的控制器中的 go 功能目前只有 scope go function hash console
  • 如何使用 sns.boxplot 或 sns.catplot 添加剖面线到箱线图

    I need to add hatches to a categorical box plot What I have is this 我需要的是这样的 带有中线 我尝试过的是这段代码 exercise sns load dataset e