Seaborn 水平条形图

2023-12-02

默认的 Seaborn 条形图几乎对我有用,尽管有一些细节。如下图所示:

Seaborn Horizontal Bar Plot

请查看每个栏旁边和右侧的“文本”注释。有几点我想改进:

  1. 由于某种原因,最后一栏不显示注释。我不知道如何解决这个问题。

  2. 条形边缘与顶部和底部 X 轴之间没有空间。我想在那里留一些空间。

  3. 无论如何,是否可以增加条形的宽度?

  4. 我还想增加“最高”条和右 Y 轴之间的距离,因为我计划添加文本,而不仅仅是与其 X 轴值相对应的厚度数字。如果您查看与 HRA 的 Red0 类别相对应的条形图,则该值类似于 105.65 (42.54%)。这显然会将其推“超过”右 Y 轴的边缘。有没有办法让它的峰值和最大 X 轴值之间有更多的距离?例如,如果我可以将其设置为条形的最大高度(易于计算)加上一定的数量。

如果我能照顾好这些细节,那就更完美了!

这是与上述问题相关的我的代码片段:

sns.set_style('whitegrid')
sns.set(font_scale=0.8)
thickness = []
for hra_color in df_hra_colors['hra']:
    thickness.append(grouped.get_group(hra_color).count()['hra'] * mult)
df_hra_colors['thickness'] = thickness
ax = sns.barplot(x='thickness', y='hra', data=df_hra_colors,
                 palette=df_hra_colors['hex'].tolist())
ax.set_xlabel("Thickness")
ax.set_ylabel("HRA")
ax.set_title("What an Awesome Plot!")
for p in ax.patches:
    ax.annotate("%.2f" % p.get_width(), (p.get_x() + p.get_width(), p.get_y() + 1.2),
                xytext=(5, 10), textcoords='offset points')
plt.show()

这是根据要求提供的一个最小的、完整的可验证示例:

""" Minimal program for demonstration """
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

def main():
    sns.set_style('whitegrid')
    sns.set(font_scale=0.8)
    # plt.rcParams['figure.figsize'] = (10,10)
    df_hra_colors = pd.DataFrame({
        'hra': ['red', 'green', 'blue'],
        'hex': ['#cc0000', '#40ff00', '#0000ff']
    })
    thickness = [1, 2, 3]
    thick_sum = sum(thickness)
    df_hra_colors['thickness'] = thickness
    ax = sns.barplot(x='thickness', y='hra', data=df_hra_colors,
                     palette=df_hra_colors['hex'].tolist())
    plt.xlim(0, max(thickness) + 30)
    ax.set_xlabel("Thickness")
    ax.set_ylabel("HRA")
    ax.set_title("What an Awesome Plot!")
    for i, p in enumerate(ax.patches):
        ax.annotate("%.2f (%.2f)%%" % (p.get_width(), thickness[i] / thick_sum * 100.0),
                    (p.get_x() + p.get_width(), p.get_y() + 1),
                    xytext=(5, 10), textcoords='offset points')
    plt.show()

if __name__ == "__main__":
    main()

And this is how it looks: enter image description here

然后,我将 p.get_y() 添加 1 的行更改为添加 0.5,如下所示:

for i, p in enumerate(ax.patches):
    ax.annotate("%.2f (%.2f)%%" % (p.get_width(), thickness[i] / thick_sum * 100.0),
                (p.get_x() + p.get_width(), p.get_y() + 0.5),
                xytext=(5, 10), textcoords='offset points')

enter image description here And this is what I got:

因此,注释文本由于偏移而被隐藏。利用这些知识,我可以调整原始脚本以在最后一栏中显示带注释的文本。但这会带来额外的问题。当您事先不知道柱数时,如何调整代码以保持一致?

你的答案2效果很好。谢谢。

由于我使用的是 sns.barplot,所以第 3 号对我不起作用。 Python 不喜欢调用 barplot 时使用宽度参数。

4号效果很好。谢谢。

感谢您对我的问题的帮助。


  1. 对于第一点,我们需要一个最小的、完整的、可验证的示例.

  2. 为了在边缘条和轴之间留出空间,可以调整轴的限制。ax.set_ylim(-1,N), where N是条数。

  3. 条形的宽度可以通过设置width的论证plt.bar. plt.bar(..., width=1);或者,对于单杠,使用height争论。 seaborn 条形图不允许设置宽度或高度。

  4. 与 2 相同,只是ax.set_xlim(0,barmax*1.4), where barmax是钢筋的最大长度。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Seaborn 水平条形图 的相关文章

随机推荐

  • 使用指针简单修改C字符串

    我有两个指向同一个 C 字符串的指针 如果我将第二个指针加一 并将第二个指针的值分配给第一个指针的值 我希望第一个字符串的第一个字符被更改 例如 include stdio h int main char original str ABC
  • Django 迁移——是否可以在项目中使用 South?

    我已经开始了一个项目 所有模型都已同步 是的 我想现在还不算太晚 我在一个项目进行期间搬到了南方 我对这个选择很满意 我认为这对部署有很大帮助 South应用程序的初始化可以随时完成
  • 错误响应:[13] 创建 Google Cloud Storage 存储桶时发生内部错误

    我正在努力推动Nodejs示例应用程序Hello World但推动后我收到错误 错误 gcloud app deploy 错误响应 13 内部错误 创建 Google Cloud Storage 存储桶时发生 代码没有任何问题 因为它只是从
  • 使用Puppeteer,如何获取Chrome DevTools的“网络”选项卡的计时信息?

    下面是我访问的截图https www ted com并检查 Google Chrome DevTools 的 网络 选项卡 并查看根请求和子请求的计时数据 如何使用 Puppeteer 以编程方式获取上述所有计时数据 理想情况下 它看起来像
  • 在 Java FX 中将 TextField 输入限制为十六进制值

    如何将用户的输入限制为仅十六进制值 使用十进制表示法时 范围是从 0 到 16383 但我想让用户输入一个十六进制数TextField 因此范围应该是从0x0000 to 0x3FFF 我已经通过以下方式构建了我的 GUISceneBuil
  • Spring Data Rest - 在 _embedded 中包含嵌套资源

    我正在为购物清单开发一个 Spring Boot 应用程序 为此 我使用 Spring Data Rest 通过 REST API 导出我的实体 我的架构看起来像这样 我有一个购物项目 public class ShoppingItem I
  • 语法错误:使用 Bash 时需要操作数

    我有两个想要循环的数组 我正确地构造了它们 在进入 for 循环之前 我确实回显它们以确保数组一切正常 但是当我运行脚本时 它输出一个错误 l lt syntax error operand expected error token is
  • XML 表到 LaTeX

    假设我有一个以下形式的 XML 表 table tr td First Name td td Bill Gates td tr tr td Telephone td td 555 77 854 td tr tr td 555 77 855
  • 来自 ASP.Net 服务器的推送通知

    我有一个执行一些操作的网络服务 当事件发生时 我会通知客户 我遇到的问题是我能够从客户端连接到服务器 但反之则不行 因为客户端恰好位于 NAT 路由器 后面 目前 我每分钟都会发出请求以检查通知 如果我能有一种技术可以更快地通知客户 而不必
  • 蓝牙 BLE 服务在 onCharacteristicRead 处返回状态 = 10

    我尝试从我连接的设备读取一些配置 但在回调中 onCharacteristicRead 参数 status 10 我注意到 status 0 表示 BluetoothGatt GATT SUCCESS 10 代表什么 我的代码如下 publ
  • HTML:使用innerHTML绘制表格

    document getElementById outputDiv innerHTML document getElementById outputDiv innerHTML table border 1 width 100 tr for
  • Cobertura 不适用于 Java 7

    我使用的是maven 3 0 4 JRE 1 7 0 09 当我使用mvn clean install我所有的测试都通过了 一切看起来都很好 这是我的 Surefire 插件配置
  • 构建 Flask-Restful API 以使用 SQLAlchemy

    因此 我尝试使用 Flask Restful 制作一个 API 但我找到的所有示例都将所有内容放入一个 app py 文件中 我在中找到了信息Flask Restful 文档解释如何构建 API 但不包含任何使用数据库的内容 我已经发布了我
  • Tomcat Guice/JDBC 内存泄漏

    由于 Tomcat 中的孤立线程 我遇到了内存泄漏 特别是 Guice 和 JDBC 驱动程序似乎没有关闭线程 Aug 8 2012 4 09 19 PM org apache catalina loader WebappClassLoad
  • signalR MVC 站点在 signalR 安装后无限期加载[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 我创建了一个全新的 MVC4 应用程序 从 NuGet
  • 访问 JButton ActionListener 中的变量

    这似乎是一个非常简单的问题 但我在弄清楚如何处理它时遇到了很多麻烦 示例场景 final int number 0 JFrame frame new JFrame frame setVisible true frame setDefault
  • 我可以删除所有迁移文件并从头开始吗?

    我有一个 Rails API 应用程序 我将在很长一段时间后重新部署它 该应用程序是非生产版本 但我已准备好部署生产版本 我想基本上删除所有迁移文件并使用架构从头开始 这种方法有什么问题吗 假设我可以做到这一点 我需要将 schema rb
  • 使用 CSS 创建功能区

    我终于创建了侧边栏菜单 现在我需要在选定的项目上创建功能区 例如显示图像 红色 我需要真正的灰色功能区 但我不想使用图像背景而只使用 css 类 因此 我可以动态地删除类名并添加到另一个项目 我有一个you are here我想要查看功能区
  • 解析 .ini 文件

    我的问题是关于使用 Windows 命令行解析 ini 文件 我在尝试从文件中删除包含所有键的部分时陷入困境 该部分的名称已知并保存在变量中 我尝试保存行 开始 结束 以删除之间的内容 但它对我不起作用 这里有人可以帮助我吗 edit 这是
  • Seaborn 水平条形图

    默认的 Seaborn 条形图几乎对我有用 尽管有一些细节 如下图所示 请查看每个栏旁边和右侧的 文本 注释 有几点我想改进 由于某种原因 最后一栏不显示注释 我不知道如何解决这个问题 条形边缘与顶部和底部 X 轴之间没有空间 我想在那里留