使用 matplotlib 具有不同顺序颜色的堆叠条形图

2023-11-26

我是Python的初学者。我正在尝试制作具有不同顺序颜色的水平条形图。

我有一个如下所示的数据集:

dataset = [{'A':19, 'B':39, 'C':61, 'D':70},
           {'A':34, 'B':68, 'C':32, 'D':38},
           {'A':35, 'B':45, 'C':66, 'D':50},
           {'A':23, 'B':23, 'C':21, 'D':16}]
data_orders = [['A', 'B', 'C', 'D'], 
               ['B', 'A', 'C', 'D'], 
               ['A', 'B', 'D', 'C'], 
               ['B', 'A', 'C', 'D']]

第一个列表包含数字数据,第二个列表包含每个数据项的顺序。我在这里需要第二个列表,因为在我的案例中呈现 A、B、C 和 D 的顺序对于数据集至关重要。

使用上面的数据,我想制作一个如下图所示的堆积条形图。它是我用 MS Excel 手动制作的。我现在希望做的是使用 Matplotlib 和上述数据集以更自动化的方式制作这种类型的条形图。如果可能的话,我还想在图表中添加图例。

Stacked Bar Chart with Differently Ordered Colors (An Example)

事实上,我自己尝试这个时完全迷失了。任何帮助都会非常非常有帮助。 非常感谢您的关注!


这是一个很长的程序,但它有效,我添加了一个虚拟数据来区分行数和列数:

import numpy as np
from matplotlib import pyplot as plt

dataset = [{'A':19, 'B':39, 'C':61, 'D':70},
           {'A':34, 'B':68, 'C':32, 'D':38},
           {'A':35, 'B':45, 'C':66, 'D':50},
           {'A':23, 'B':23, 'C':21, 'D':16},
           {'A':35, 'B':45, 'C':66, 'D':50}]
data_orders = [['A', 'B', 'C', 'D'], 
               ['B', 'A', 'C', 'D'], 
               ['A', 'B', 'D', 'C'], 
               ['B', 'A', 'C', 'D'],
               ['A', 'B', 'C', 'D']]
colors = ["r","g","b","y"]
names = sorted(dataset[0].keys())
values = np.array([[data[name] for name in order] for data,order in zip(dataset, data_orders)])
lefts = np.insert(np.cumsum(values, axis=1),0,0, axis=1)[:, :-1]
orders = np.array(data_orders)
bottoms = np.arange(len(data_orders))

for name, color in zip(names, colors):
    idx = np.where(orders == name)
    value = values[idx]
    left = lefts[idx]
    plt.bar(left=left, height=0.8, width=value, bottom=bottoms, 
            color=color, orientation="horizontal", label=name)
plt.yticks(bottoms+0.4, ["data %d" % (t+1) for t in bottoms])
plt.legend(loc="best", bbox_to_anchor=(1.0, 1.00))
plt.subplots_adjust(right=0.85)
plt.show()

结果图是:

enter image description here

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

使用 matplotlib 具有不同顺序颜色的堆叠条形图 的相关文章

随机推荐

  • 通过 PublicKeyToken 防止外部程序集注入

    我正在使用以下代码 AppDomain CurrentDomain AssemblyLoad sender args gt var token args LoadedAssembly GetName GetPublicKeyToken if
  • 如何禁用一个类或整个包的记录器?

    我在用Apache Commons 日志记录 现在我想用SimpleLog实现 但是当我更改级别时 库中的记录器出现了 我希望它能把它们关掉 有没有一种简单的方法来更改整个包的日志级别 Log4j 可以做到这一点 我尝试过设置 org ap
  • Swift 运算符的优先级是什么?

    我想查找一些运算符的优先级 某处有所有这些的列表吗 我还没找到 更新为 Swift 3 0 斯威夫特3 0 现在有一个page在 Swift 文档中 下面列出了所有优先级组 也可以通过命令单击import Swift precedenceg
  • 本地通知的通知服务扩展

    系统将加载通知服务扩展并调用其didReceive withContentHandler iOS 10 中的本地通知 如果是的话我们该怎么做 否 接受的答案描述了通知Content扩展 允许您在展开的通知视图中呈现 ViewControll
  • 如何获取Android中支持的摄像机分辨率?

    我正在编写一个应用程序 允许用户使用手机摄像头捕捉视频 我使用自己的代码来录制视频 而不是 Android 内置的相机应用程序 一切工作正常 除了我需要能够访问支持的相机分辨率列表 以便我可以在运行时选择使用哪一个 我正在寻找类似的东西ge
  • 如何使用 ssh 使用 Nodegit 克隆 git 存储库

    我正在尝试使用库nodegit 版本0 2 4 和ssh从我们的teamforge服务器在node js中克隆git存储库 我们的服务器请求用户进行身份验证 当我尝试仅使用克隆方法而不传递选项时 我收到错误 回调无法初始化 SSH 凭据 我
  • ASP.Net WebAPI OWIN:为什么 Request.GetOwinContext() 返回 null?

    在我的生产代码中 我们遇到了 Request GetOwinContext 始终返回 null 的问题 我设置了一个小型测试 WebAPI 控制器来尝试隔离问题 public class TestController ApiControll
  • 如何正确使用 SET XACT_ABORT ON

    我们最近被空降到一个新的 ETL 项目 该项目的代码非常糟糕 我手中有一个包含 700 行和各种更新的查询 我想用它来调试它SET XACT ABORT ON 目标是如果只有一个事务失败则回滚所有事务 但我找到了几种将其存档在 StackO
  • 为什么 scala 函数限制为 22 个参数?

    并不是说我实际上已经接近这个极限 但我一直想知道 为什么他们停在Function22 Tuple22 JVM 限制 任意选择 函数和元组被编译器重写为对象 并且仅Function0通过Function22 and Tuple0通过Tuple
  • Jinja2 按月/年分组

    我正在尝试按月 年对 Jinja 的日期 时间列表进行分组 这是我现在的代码 for group in EventsList groupby date b group grouper b br for event in group list
  • if 和 if 不为 None 之间的区别

    在编写一些 XML 解析代码时 我收到了警告 FutureWarning The behavior of this method will change in future versions Use specific len elem or
  • .NET 中 UTC 和 GMT 标准时间的差异

    在 NET 中 以下语句返回不同的值 Response Write TimeZoneInfo ConvertTime DateTime Parse 2010 07 01 5 30 00 000 TimeZoneInfo FindSystem
  • 使用对象的 n 个克隆创建 java 集合

    在Java中 是否有一种单行方法来创建一个初始化的集合n对象的克隆 我想要这样的等价物 foo vector
  • 检查字符串是否包含数组中的值[重复]

    这个问题在这里已经有答案了 我正在尝试检测一个字符串是否至少包含一个存储在数组中的 URL 这是我的数组 owned urls array website1 com website2 com website3 com 该字符串由用户输入并通
  • 如何使用bind_rows()并忽略列名[重复]

    这个问题在这里已经有答案了 这个问题以前可能已经回答过 但我似乎找不到答案 你怎么用bind rows 只是union两个表并忽略列名 有关的文档bind rows 有以下示例 Columns don t need to match whe
  • 如何在用 [ApiController] 装饰的控制器中对模型验证进行单元测试?

    正如指出的这个答案 to Asp Net Core 2 1 ApiController 在单元测试下不会自动验证模型 ASP NET Core 2 1 的 ApiControllerAttribute 为我们提供的自动 ModelState
  • 在 xcode 6.1 中,界面生成器删除 ui 元素

    我有一个包含一些表格视图和一些集合视图以及一些按钮和标签的视图 我不确定这是否是 Xcode 6 1 的新功能 因为我已经有一段时间没有从事该项目的 ui 方面的工作了 但是 当我尝试调整视图中的任何内容时 我的表视图和集合视图 以及可能还
  • Syntastic for Vim:~/.vimrc 中需要哪些行? (PHP错误检查)

    我发现这些文件令人沮丧 我需要添加到配置文件中才能使其正常工作的基本行是什么 从技术上来说 没什么 如果您已将 Syntastic 提取到您的 vim目录 尝试使用 SyntasticEnableVim 中的命令为当前打开文件的文件类型启用
  • 带有代码签名 .exe 文件的 Windows 10 SmartScreen

    我创建了一个 setup exe 文件并将其加载到我的网站上以供下载 exe 文件已使用 godaddy 的证书进行了代码签名 当使用 win7 从我的网站下载 exe 文件时 它会检测到证书并将其显示为安全下载 在 win10 上 exe
  • 使用 matplotlib 具有不同顺序颜色的堆叠条形图

    我是Python的初学者 我正在尝试制作具有不同顺序颜色的水平条形图 我有一个如下所示的数据集 dataset A 19 B 39 C 61 D 70 A 34 B 68 C 32 D 38 A 35 B 45 C 66 D 50 A 23