将哈希模式添加到seaborn条形图中[重复]

2023-12-22

我有一个使用seaborn 创建的条形图。例如,可以按如下方式创建绘图:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
data1 = pd.DataFrame(np.random.rand(17,3), columns=['A','B','C']).assign(Location=1)
data2 = pd.DataFrame(np.random.rand(17,3)+0.2, columns=['A','B','C']).assign(Location=2)
data3 = pd.DataFrame(np.random.rand(17,3)+0.4, columns=['A','B','C']).assign(Location=3)
cdf = pd.concat([data1, data2, data3])
mdf = pd.melt(cdf, id_vars=['Location'], var_name=['Letter'])
ax = sns.barplot(x="Location", y="value", hue="Letter", data=mdf, errwidth=0)  
ax.legend(loc='upper center', bbox_to_anchor=(0.5, 1.2), ncol=3, fancybox=True, shadow=True)
plt.show()

This gives the following plot enter image description here I would like to do customize the chart as follows:

  1. 去除脸部颜色(将其设置为白色)
  2. 向图像添加哈希模式以区分组 如何才能实现这一目标?

去除脸部颜色很简单,只需要做ax.set_facecolor('w'),尽管这会使网格线不可见。我建议使用sns.set_style('whitegrid')在绘图之前,您将获得白色背景,只有灰色的水平网格线。

至于不同的模式,这对于seaborn来说有点棘手,但它是可以做到的。您可以通过hatchbarplot 的关键字参数,但它将应用于每个条形图,这并不能真正帮助您区分它们。不幸的是,在这里传递字典是行不通的。相反,您可以在构建条形后对其进行迭代以应用剖面线。您必须计算位置的数量,但这对于 pandas 来说非常简单。事实证明,seaborn 实际上会在移动到下一个色调之前绘制每种色调,因此在您的示例中,它将绘制所有蓝色条,然后是所有绿色条,然后是所有红色条,因此逻辑非常简单:

num_locations = len(mdf.Location.unique())
hatches = itertools.cycle(['/', '//', '+', '-', 'x', '\\', '*', 'o', 'O', '.'])
for i, bar in enumerate(ax.patches):
    if i % num_locations == 0:
        hatch = next(hatches)
    bar.set_hatch(hatch)

所以完整的脚本是

import itertools
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_style('whitegrid')
data1 = pd.DataFrame(np.random.rand(17, 3), columns=['A', 'B', 'C']).assign(Location=1)
data2 = pd.DataFrame(np.random.rand(17, 3) + 0.2, columns=['A', 'B', 'C']).assign(Location=2)
data3 = pd.DataFrame(np.random.rand(17, 3) + 0.4, columns=['A', 'B', 'C']).assign(Location=3)
cdf = pd.concat([data1, data2, data3])
mdf = pd.melt(cdf, id_vars=['Location'], var_name=['Letter'])
ax = sns.barplot(x="Location", y="value", hue="Letter", data=mdf, errwidth=0)

num_locations = len(mdf.Location.unique())
hatches = itertools.cycle(['/', '//', '+', '-', 'x', '\\', '*', 'o', 'O', '.'])
for i, bar in enumerate(ax.patches):
    if i % num_locations == 0:
        hatch = next(hatches)
    bar.set_hatch(hatch)

ax.legend(loc='upper center', bbox_to_anchor=(0.5, 1.1), ncol=3, fancybox=True, shadow=True)

plt.show()

我得到输出


设置舱口和可用的不同舱口的参考:http://matplotlib.org/examples/pylab_examples/hatch_demo.html http://matplotlib.org/examples/pylab_examples/hatch_demo.html

注意:我调整了你的bbox_to_anchor对于图例,因为它部分位于我计算机上的图形之外。

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

将哈希模式添加到seaborn条形图中[重复] 的相关文章

随机推荐

  • 从 Activity 打开片段

    我正在开发一个小型谷歌地图应用程序 它可以让用户找到靠近他们的地方 我想添加功能 让用户将一个地方添加到收藏夹列表中 到目前为止 我创建了可以执行该功能的类 我的主要活动是我的主页 它打开其他活动 代码如下 import android a
  • 修复 Ember 1.12.0 中初始化程序的弃用问题

    我指的是 Ember 1 12 中引入的这一特定弃用 lookup被要求登记 这initializerAPI 不再 收到一个容器 你应该使用instanceInitializer到 从容器中查找对象 我查看了指南 但不确定如何解决这个问题
  • 在运行时在 WPF RichTextBox 中的新行中添加文本

    我想在运行时在 WPF RichTextBox 中的新行中添加一些文本 我可以使用以下方法来做到这一点 FlowDocument mcFlowDoc new FlowDocument mcFlowDoc richTextBox Docume
  • MVC、控制器 - 用例

    我了解到 您应该在 MVC OOD 中将控制器类设置为用例 从上到下仅使用一种运行 MVC 类的方法 是否可以在一个控制器中使用不同的方法来获得更多控制和更好的概览 假设您想要运行一个控制器来显示登录表单 从视图获取 html 等 如果用户
  • Matlab 中的相交体积

    我开发了一个代码 它采用一组 3D 坐标 并执行三角测量来生成凸包 Delaunay 这一切进展顺利 使用 Deluanay 三角测量 我可以使用 tsearchn 测试点是否包含在给定体积中 现在我想取两个这样的 3D 体积 并测试它们是
  • 什么是 Visio Enterprise Architect 的良好替代品? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我一直在使用 Visio 2002 2003 Enterprise Architect 直观地进行数据库架构设计 然后前向生成 DDL 来
  • 解析 PHP 中的属性/值列表

    给定一个带有属性 值对的字符串 例如 attr1 some text attr2 some other text attr3 some weird text 目标是解析它并输出一个关联数组 在本例中 array attr1 gt some
  • 在 PyCharm IDE 中添加 Spark 包

    我已将 PyCharm 设置为与本地 Spark 安装链接在这个链接中 https stackoverflow com questions 34685905 how to link pycharm with pyspark from pys
  • 那么:有什么意义呢?

    其预期目的是什么So https github com idris lang Idris dev blob master libs base Data So idr L14类型 音译为阿格达 data So Bool Set where o
  • 无服务器 Cron 作业触发两次

    我不知道为什么 但我的 webhook 在我的 cron 作业中被解雇了两次 因此 这个 cron 作业应该每 15 分钟运行一次 但它确实执行了两次 我将发布日志 处理程序和 yml 文件来提供帮助 基本上我的 cron 作业将向 sal
  • 在数据库中仅存储日期而不是时间部分 C#

    我有一个测试班和一个ExecutionDate只存储日期的属性 但是当我们使用 DataType DataType Date 它还将时间部分存储在数据库中 但我只想要日期部分 public class Test Key public int
  • Ooyala播放器(iOS):如何全屏启动?

    我在我的项目中使用 Ooyala 播放器 该项目曾经使用 MPMoviePlayer 我们只需更改视图的大小以使其全屏或不全屏 但 Ooyala 播放器似乎通过使用另一个模态视图控制器来维护自己的全屏 内联模式切换到全屏 这会产生很多问题
  • SQL Server 与 ADO.NET 的默认事务隔离级别是什么?

    SQL Server 与 ADO NET 的默认事务隔离级别是什么 我使用的是 SQL Server 的默认安装和普通的 System Data SqlClient 类 READ COMMITTED 是 Microsoft SQL Serv
  • FileProvider - 从下载目录打开文件

    我无法打开下载文件夹中的任何文件 我可以使用以下命令下载文件并将其保存在下载文件夹中 DownloadManager Request request new DownloadManager Request Uri parse url req
  • MySQL 查询显示当前日期在顶部的记录以及其他按降序排列的记录

    我在数据库中使用以下查询 SELECT b sales id b category id b sale starts b sale ends FROM tbl sales b WHERE b active 1 UNION SELECT b
  • 如何更改 Material UI 工具栏的高度?

    我是 React 和 Material UI 的新手 我正在努力解决组件占用多少垂直空间的问题 我想做的一件事是降低工具栏的高度 我尝试过指定样式
  • 无法找到使用 jwcrypto 在 python 中解密 JWE 令牌(但在 ASP.Net 中创建)的方法

    使用 ASP Net 加密后 我在 python 中解密 JWE 令牌时遇到困难 这是我的 C 代码 假密码 var signingKey new SymmetricSecurityKey Encoding UTF8 GetBytes ae
  • 使用 pandas 编写单个 CSV 标头

    我将数据解析为列表 并使用 pandas 构建并写入 CSV 文件 首先我的数据被放入一个集合中inv name and date都是包含大量条目的列表 然后我用concat将我解析的数据集的每次迭代连接到 CSV 文件 如下所示 coun
  • jquery ajax 和 google chrome 的问题

    我使用 jQuery 在用户离开页面时显示确认消息 如下所示 var changes false window onunload function if changes post check php undovideokey VID els
  • 将哈希模式添加到seaborn条形图中[重复]

    这个问题在这里已经有答案了 我有一个使用seaborn 创建的条形图 例如 可以按如下方式创建绘图 import pandas as pd import numpy as np import matplotlib pyplot as plt