如何按类别用百分比注释计数图

2024-03-05

嗨,我正在尝试将百分比添加到我的countplot有 5 个类别和 2 个值(旧的和新的)。我尝试添加 def 和循环如何在seaborn中的条形顶部添加百分比? https://stackoverflow.com/questions/31749448/how-to-add-percentages-on-top-of-bars-in-seaborn

My code:

plt.figure(figsize =(7,5))
ax = sb.countplot(data = df_x_1, x = 'concern_virus', hue = 'age')
plt.xticks(size =12)
plt.xlabel('Level of Concern', size = 14)
plt.yticks(size = 12)
plt.ylabel('Number of People', size = 12)
plt.title("Older and Younger People's Concern over the Virus", size = 16)
ax.set_xticklabels(ax.get_xticklabels(), rotation=40, ha="right");

for p in ax.patches:
    percentage = '{:.1f}%'.format(100 * p.get_height()/total)
    x = p.get_x() + p.get_width()
    y = p.get_height()
    ax.annotate(percentage, (x, y),ha='center')
plt.show()

正如您所看到的,百分比没有意义。


问题似乎出在上面代码中未定义的变量上:total. total应该是您要拨打的号码100%,例如数据框中的总行数。这样所有显示的百分比总和就是 100。

这是一些示例代码:

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

N = 250
df_x_1 = pd.DataFrame({'concern_virus': np.random.choice(['a', 'b', 'c', 'd', 'e'], N),
                       'age': np.random.choice(['younger', 'older'], N)})
plt.figure(figsize=(7, 5))
ax = sns.countplot(data=df_x_1, x='concern_virus', order=['a', 'b', 'c', 'd', 'e'],
                   hue='age', hue_order=['younger', 'older'],
                   palette=['chartreuse', 'darkviolet'])
plt.xticks(size=12)
plt.xlabel('Level of Concern', size=14)
plt.yticks(size=12)
plt.ylabel('Number of People', size=12)
plt.title("Older and Younger People's Concern over the Virus", size=16)
ax.set_xticklabels(ax.get_xticklabels(), rotation=40, ha="right")

total = len(df_x_1)
for p in ax.patches:
    percentage = f'{100 * p.get_height() / total:.1f}%\n'
    x = p.get_x() + p.get_width() / 2
    y = p.get_height()
    ax.annotate(percentage, (x, y), ha='center', va='center')
plt.tight_layout()
plt.show()

要将文本放在栏的中心,它有助于选择ha='center'并将宽度的一半添加到 x 位置。在文本中添加换行符可以帮助将文本很好地放置在栏的顶部。plt.tight_layout()可以帮助将所有标签放入绘图中。

Seaborn 允许您通过以下方式修复 x 轴的顺序order=...。图例元素的顺序和相应的颜色可以通过设置hue_order=... and palette=....

PS:对于新问题,每个年龄组的总数,不是直接循环所有条形图,而是第一个循环可以访问组:

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

label_younger = 'younger'
label_older = 'older'
df_younger = pd.DataFrame({'concern_virus': np.random.choice(['a', 'b', 'c', 'd', 'e'], 230)})
df_older = pd.DataFrame({'concern_virus': np.random.choice(['a', 'b', 'c', 'd', 'e'], 120)})
df_younger['age'] = label_younger
df_older['age'] = label_older
df_x_1 = pd.concat([df_younger, df_older], ignore_index=True)

plt.figure(figsize=(7, 5))
ax = sns.countplot(data=df_x_1, x='concern_virus', order=['a', 'b', 'c', 'd', 'e'],
                   hue='age', hue_order=[label_younger, label_older],
                   palette=['orangered', 'skyblue'])
plt.xticks(size=12)
plt.xlabel('Level of Concern', size=14)
plt.yticks(size=12)
plt.ylabel('Number of People', size=12)
plt.title("Older and Younger People's Concern over the Virus", size=16)
ax.set_xticklabels(ax.get_xticklabels(), rotation=40, ha="right")

for bars in ax.containers:
    if bars.get_label() == label_younger:
        group_total = len(df_younger)
    else:
        group_total = len(df_older)
    for p in bars.patches:
        # print(p.get_facecolor(), p.get_label())
        percentage = f'{100 * p.get_height() / group_total:.1f}%\n'
        x = p.get_x() + p.get_width() / 2
        y = p.get_height()
        ax.annotate(percentage, (x, y), ha='center', va='center')
plt.tight_layout()
plt.show()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何按类别用百分比注释计数图 的相关文章

  • 高效地将大型 Pandas 数据帧写入磁盘

    我正在尝试找到使用 Python Pandas 高效地将大型数据帧 250MB 写入磁盘或从磁盘写入的最佳方法 我已经尝试了所有方法Python 数据分析 但表现却非常令人失望 这是一个更大项目的一部分 该项目探索将我们当前的分析 数据管理
  • minAreaRect OpenCV 返回的裁剪矩形 [Python]

    minAreaRectOpenCV 中返回一个旋转的矩形 如何裁剪矩形内图像的这部分 boxPoints返回旋转矩形的角点的坐标 以便可以通过循环框内的点来访问像素 但是在 Python 中是否有更快的裁剪方法 EDIT See code在
  • 绝对导入不起作用,但相对导入起作用

    这是我的应用程序结构 foodo setup py foodo init py foodo py models py foodo foodo foodo py从导入类models py module from foodo models im
  • 计算熊猫数据帧几个月的总和

    我有一个 pandas 数据框 如下所示 ID Year R1 R1 f KAR1 20201001 1 5 KAR1 20201101 2 6 KAR1 20201201 3 7 KAR1 20210101 4 8 KAR1 202102
  • 如何将脚本作为 pytest 测试运行

    假设我有一个用简单脚本表示的测试assert 陈述 请参阅背景了解原因 例如 import foo assert foo 3 4 我如何以一种好的方式将该脚本包含在我的 pytest 测试套件中 我尝试了两种有效但不太好的方法 一种方法是将
  • 如何在动态执行的代码字符串中使用inspect.getsource?

    如果我在文件中有这段代码 import inspect def sample p1 print p1 return 1 print inspect getsource sample 当我运行脚本时 它按预期工作 在最后一行 源代码sampl
  • 从字典中绘制直方图

    我创建了一个dictionary计算 a 中出现的次数list每个键的内容 我现在想绘制其内容的直方图 这是我想要绘制的字典的内容 1 27 34 1 3 72 4 62 5 33 6 36 7 20 8 12 9 9 10 6 11 5
  • Karasuba算法递归过多

    我正在尝试用 c 实现 Karasuba 乘法算法 但现在我只是想让它在 python 中工作 这是我的代码 def mult x y b m if max x y lt b return x y bm pow b m x0 x bm x1
  • dask apply:AttributeError:“DataFrame”对象没有属性“name”

    我有一个参数数据框 并对每一行应用一个函数 该函数本质上是几个 sql queries 和对结果的简单计算 我正在尝试利用 Dask 的多处理 同时保持结构和界面 下面的例子有效并且确实有显着的提升 def get metrics row
  • 如何仅注释堆积条形图的一个类别

    我有一个数据框示例 如下所示 data Date 2021 07 18 2021 07 19 2021 07 20 2021 07 21 2021 07 22 2021 07 23 Invalid NaN 1 1 NaN NaN NaN N
  • Bokeh 中单独的节点和边缘悬停工具?

    我正在尝试为 Bokeh 中的节点和边缘获取单独的悬停工具提示 但未能使其正常工作 有人可以指出我做错了什么吗 我相信代码应该如下所示 from bokeh io import show output notebook from bokeh
  • 预测测试图像时出现错误 - 无法重塑大小数组

    我正在尝试使用 TensorFlow 和 Keras 在 Python 中进行图像识别 并且我已经关注了下面的博客 https stackabuse com image recognition in python with tensorfl
  • 操作错误:尝试在 ubuntu 服务器中写入只读数据库

    我正在使用 FlaskApp 运行mod wsgi and apache2在 Ubuntu 服务器上 我尝试运行烧瓶应用程序localhost成功 然后部署到ubuntu服务器上 但是当我尝试更新数据库时 出现错误 Failed to up
  • 更改用作函数全局作用域的字典

    我想做一个 purePython 的装饰器 其中一部分是能够有选择地禁止访问函数的全局范围 有没有一种方法可以以编程方式更改哪个字典事物充当函数的全局 外部作用域 因此 例如在下面我希望能够拦截对f in h并抛出错误 但我想允许访问g因为
  • 在 for 循环中访问 itertools 产品的元素

    我有一个列表列表 是附加 itertools 产品的一些其他结果的结果 我想要的是能够使用 for 循环访问列表列表中列表的每个元素 但我无法访问所有元素 我只能访问最后一个列表的元素 结果是一个非常巨大的列表列表 例如 1 2 4 3 6
  • 如何使用logging.conf文件使用RotatingFileHandler将所有内容记录到文件中?

    我正在尝试使用RotatingHandler用于 Python 中的日志记录目的 我将备份文件保留为 500 个 这意味着我猜它将创建最多 500 个文件 并且我设置的大小是 2000 字节 不确定建议的大小限制是多少 如果我运行下面的代码
  • 在不同的 GPU 上同时训练多个 keras/tensorflow 模型

    我想在 Jupyter Notebook 中同时在多个 GPU 上训练多个模型 我正在使用 4GPU 的节点上工作 我想将一个 GPU 分配给一个模型并同时训练 4 个不同的模型 现在 我通过 例如 为一台笔记本选择 GPU import
  • 旧版本的 spaCy 在尝试安装模型时抛出“KeyError: 'package'”错误

    我在 Ubuntu 14 04 4 LTS x64 上使用 spaCy 1 6 0 和 python3 5 为了安装 spaCy 的英文版本 我尝试运行 这给了我错误消息 ubun ner 3 NeuroNER master src pyt
  • 如何在supervisord中设置组?

    因此 我正在设置 Supervisord 并尝试控制多个进程 并且一切正常 现在我想设置一个组 以便我可以启动 停止不同的进程集 而不是全部或全无 这是我的配置文件的片段 group tapjoy programs tapjoy game1
  • python 日志记录替代方案 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 蟒蛇记录模块 http docs python org library logging html使用起来

随机推荐

  • 更改项目名称和包名称

    Android 中是否可以更改项目名称和包名称 项目名称 res gt values gt strings xml gt app name gt change the name 包裹名字 右键项目 gt Android工具 gt 重命名应用
  • VBScript 字符串替换为范围而不是字符串?

    代替 http msdn microsoft com en us library 238kz954 28v vs 84 29 aspx已经存在 但该函数接受字符串作为参数 我需要射程 在我的字符串中有两个 10 个字符长的 字符串 Greg
  • 在 PowerShell 7 中安装/重新启动脚本

    我有一个使用的脚本 Authentication的参数调用RestMethod https learn microsoft com en us powershell module microsoft powershell utility i
  • 使用 (wx)python 记录外部程序的输出

    我正在编写一个 GUI 用于使用 oracle exp imp 命令并通过 sqlplus 启动 sql 脚本 子进程类可以轻松启动命令 但我需要一些附加功能 我想在使用 wxPython GUI 时摆脱命令提示符 但我仍然需要一种方法来显
  • 我的 Visual Force 页面上的 Google 地图未将所有标记显示为获取的结果数

    我正在尝试开发一个显示 程序位置 的视觉力页面 在页面加载时 它会获取所有程序并使用标记显示在地图上 有一些过滤器可用于减少结果集并查看特定程序 一切正常 除了页面加载时 我的结果表位于 Google 地图 div 下方 显示 16 条记录
  • OpenID:尝试从 Google OP 获取电子邮件地址

    我正在使用 dotnetopenauth 3 2 来实现 Openid 但不知道如何让 Google 在声明响应中传递电子邮件地址 我知道 Google 不支持简单注册 但我无法确定他们支持什么 对这个问题的警告是 我刚刚开始学习 Open
  • XmlReader - 自关闭元素不会触发 EndElement 事件?

    我在 NET 中使用 XmlReader 使用循环解析 XML 文件 while xml Read switch xml NodeType case XmlNodeType Element Do something case XmlNode
  • iOS 上基于时间的 UUID(版本 1)?

    我们如何使用 iOS 创建 RFC 4122 投诉 UUID 版本 1 基于时间 这是man page https developer apple com library archive documentation System Conce
  • Woocommerce WC_Order get_shipping_address() 未作为数组返回

    从 Woocommerce 检索订单信息时 它指出它应该是一个数组 请参阅 http docs woothemes com wc apidocs class WC Order html get shipping address http d
  • 从另一个 DataFrame 填充 NaN 值(具有不同的形状)

    我正在寻找一种更快的方法来提高解决方案的性能 以解决以下问题 某个 DataFrame 有两列 其中有一些列NaN他们身上的价值观 挑战在于取代这些NaNs带有来自辅助 DataFrame 的值 下面我将分享用于实现我的方法的数据和代码 让
  • 哈希集处理以避免迭代期间陷入循环

    我正在研究图像挖掘项目 我使用 Hashset 而不是数组来避免在收集 url 时添加重复的 url 我到达了代码点以迭代包含主 url 的 Hashset 并在迭代中下载主 URL 的页面并将它们添加到哈希表中 然后继续 在迭代期间我应该
  • 数据库模式规范化检查器?

    我有兴趣了解如下操作的工具 给定一个数据库模式和一些数据 建议该模式是否可能以任何特定的范式构建 然后告诉如何分解该模式以产生进一步的规范化 基本上 是一个用于数据库模式设计的静态分析工具 与其他静态分析工具一样 这样的数据库工具不需要生成
  • Python Numpy 外积将函数列表应用于参数列表而不使用 For 循环

    我有一个数字数组和一个函数列表 我想对每个数字运行每个函数以获取矩阵 有没有一种方法可以在不使用缓慢的Python循环 映射的情况下做到这一点 import numpy arr numpy array 1 2 3 4 5 fns numpy
  • C++ 中的 Ada 子类型等效项

    C 是否提供类似于 Ada 的功能subtype缩小类型 E g type Weekday is Monday Tuesday Wednesday Thursday Friday Saturday Sunday subtype Workin
  • Xcode 7.0.1 - 无效的 Swift 支持 - 缺少 SwiftSupport 文件夹。

    我尝试在 AppStore 上发布包含 Swift 2 0 文件的应用程序 但收到以下电子邮件 亲爱的开发者 我们发现您最近的交货存在一个或多个问题 米兰情绪 要处理您的交货 必须解决以下问题 更正 无效的 Swift 支持 缺少 Swif
  • React.js - 语法错误:这是 render() 函数中的保留字

    我遇到了保留关键字 this 的错误 在下面的 React 组件中 我将状态从主组件 App js 传递到 RecipeList js 组件 然后映射数据并渲染每个 RecipeItem 组件 我只是不明白为什么会出现这个错误 React
  • gcc/g++ 输出类型

    我知道这是一个非常基本的问题 但是当我用 gcc g 编译我的 c c 代码时 在汇编器开始生成机器代码之前中间输出的类型到底是什么 是类似X86指令的东西吗 GCC的处理链如下 你的源代码 预处理的源代码 展开宏并包含 去除注释 E ii
  • iPhone Ad Hoc 分发无期限

    背景故事 我在一家开发和制造商业产品的公司工作 该产品在一个农场中可以拥有多达 100 多台专用 PC 我们每年只获得少数新客户 我们开发了一款 iPod iPhone 应用程序 可以让我们向农场发送命令并提取数据 我们的母公司非常担心将此
  • iOS 使用 UIActivityViewController 共享 CSV 文件

    我有一个共享 CSV 文件的应用程序 我还共享与内置选项 例如邮件 和外部选项 例如 Gmail 应用程序或 Evernote 完美配合的其他文件 如果我尝试共享 CSV 文件 内部邮件选项将按预期工作 但其他选项 例如 Gmail 或 E
  • 如何按类别用百分比注释计数图

    嗨 我正在尝试将百分比添加到我的countplot有 5 个类别和 2 个值 旧的和新的 我尝试添加 def 和循环如何在seaborn中的条形顶部添加百分比 https stackoverflow com questions 317494