首页 > 编程问答 >如何在Python的matplotlib中将条形标签绘制到右侧并为条形标签添加标题?

如何在Python的matplotlib中将条形标签绘制到右侧并为条形标签添加标题?

时间:2024-07-24 11:59:04浏览次数:13  
标签:python pandas matplotlib

我已经在 python 中的 matplotlib 中创建了一个图表,但是以下代码中的最后一行不允许在图表之外对齐条形标签。

import matplotlib.pyplot as plt
g=df.plot.barh(x=name,y=days)
g.set_title("Days people showed up")
g.bar_label(g.containers[0], label_type='edge')

我得到一个看起来像这样的图表:

      Days people showed up
     -----------------------
Amy  |+++ 1                |
Bob  |+++++++++++++++ 4    |
Jane |+++++++ 2            |
     ---|---|---|---|---|---
        1   2   3   4   5

相反,我想要一些东西像这样:

      Days people showed up
     ----------------------- Count
Amy  |+++                  |     1
Bob  |+++++++++++++++      |     4
Jane |+++++++              |     2
     ---|---|---|---|---|---
        1   2   3   4   5

可以这样做吗?它似乎不是 matplotlib 中原生的,因为 label_type 的唯一选项是边缘或中心。是否也可以在条形标签上添加标签?


当然可以!虽然 matplotlib 没有直接在条形图的右侧添加标签的选项,但我们可以通过一些自定义实现。

以下是实现目标的方法:

import matplotlib.pyplot as plt

# 你的数据(假设与你的代码段相同)
name = ['Amy', 'Bob', 'Jane']
days = [1, 4, 2]

fig, ax = plt.subplots()
bars = ax.barh(name, days)

# 设置标题
ax.set_title("Days people showed up")

# 在条形图的右侧添加标签
ax.bar_label(bars, padding=5)

# 添加标签标题
ax.text(1.02, 0.95, 'Count', transform=ax.transAxes, ha='left', va='center')

# 调整布局以容纳标签
plt.tight_layout()
plt.show()

说明:

  1. ax.bar_label(bars, padding=5) 此函数用于为条形图添加标签。我们使用 padding 参数在条形图和标签之间添加一些间距。
  2. ax.text(1.02, 0.95, 'Count', ...) 此函数用于添加标签标题。
    • 1.02 0.95 是相对于坐标轴的坐标,将标签放置在右侧。
    • transform=ax.transAxes 确保坐标相对于坐标轴而不是数据。
    • ha='left' va='center' 分别将标签水平和垂直对齐。
  3. plt.tight_layout() 此函数用于自动调整子图参数,以便所有元素都适合图形区域,包括标签。

此代码将生成一个水平条形图,其中条形图标签位于右侧,并且在标签上方有一个“Count”标签。

标签:python,pandas,matplotlib
From: 78786324

相关文章

  • 19、Python之容器:快来数一数,24678?Counter能数得更好
    引言关于数据的分组计数,前面的文章中已经涉及了很多次。眼下要进行分组计数,我们可用的方法有:1、直接使用dict进行计数,需要对首次出现的键进行判断初始化的操作;2、使用dict的setdefault()方法进行计数,代码可以简化一些,虽然方法名有点怪;3、defaultdict进行计数,可以设置自动......
  • 如何使用 C# 检查用户是否安装了最低 Python 版本并且可以访问我的代码?
    我正在开发一个C#程序,该程序必须为一项特定任务运行一些Python代码。(Python代码很复杂,是由另一个团队开发的。无法在C#中重现其功能。)我正在尝试更新我的程序的安装程序文件以解决此问题:我希望它检查用户是否(谁正在安装我的程序)已安装Python并且它满足我的最低版......
  • 如何优雅地将复杂的Python对象和SQLAlchemy对象模型类结合起来?
    我有一个相当复杂的类,具有从提供的df到init计算的复杂属性,这些属性可能是最终可以序列化为字符串的其他类类型。在Python中,我想处理对象而不是原始类型,但也想使用SQLAlchemy与数据库交互。表中的列与许多类属性相同,如何优雅地组合这两个类?我可以使用组合并将数据......
  • Python Match Case:检查未知长度的可迭代内部的类型
    我想使用匹配大小写检查一个未知长度的迭代(假设为list)仅包含给定类型(假设为float)(还有其他情况,只有这个给我带来了问题)。case[*elems]ifall([isinstance(elem,float)foreleminelems]):returnnum这个似乎可行,但确实很不Pythony。看来应该有更简单的方法。......
  • Python实现excel数据的读取和写入
    1.安装说到前面的话,实现excel文件数据的读取和写入,在python中还有其它方法,比如说pandas。鉴于最近粉丝朋友问到上面的“xlrd”和“xlwt”,那么笔者下面将通过这两个方法,来实现excel文件数据的读取和写入。首先,我们先需要提前安装好对应的库。需要注意的是,xlrd从2.0版本开始,只......
  • python_进程与线程_多线程
    一、程序与进程的概念1、进程:指启动后的程序,系统会为进程分配内存空间二、创建进程的方式1、第一种创建进程的方式process(group=None,target,name,args,kwargs)group:表示分组,实际上不使用,默认为None即可target:表示子进程要执行的任务,支持函数名name:表示子进程的......
  • python_网络编程_socket
    一、网络编程的基本概念通信协议:internet协议,任何私有网络支持此协议,就可以接入互联网二、七层协议与四层协议从下到上分别是:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层三、掌握TCP、IP协议ip协议是整个TCP、IP协议族的核心IP地址就是会联网上计算......
  • 你能对 Python 类型注释进行模式匹配吗?
    你能在Python类型上进行模式匹配吗?我见过简单的例子:importbuiltinsmatchx:casebuiltins.str:print("matchedstr")casebuildins.int:print("matchedint")但我想在嵌套类型上进行模式匹配,比如Annotated[Optional[Literal["a",......
  • python Polars:替换嵌套列表的元素
    有谁知道是否可以有效地替换极坐标中嵌套列表的元素。例如:s=pl.Series('s',[[1,2,3],[3,4,5]])#replace3with10toget[[1,2,10],[10,4,5]]我已经尝试过s.to_frame().with_columns(pl.when(pl.col('s')==3)...)但是pl.when不喜欢List[bo......
  • Python 中的常量应该大写吗?
    在PEP8中,一般规则是在UPPER_CASE字符中声明常量。在现实生活中,可能有多种情况:#!envpythonDATABASE_HOST='localhost'app=Flask('myapp')base_two=partial(int,base=2)通常我们将字符串类型或数字类型变量视为不可变的,因此是常量,而不是对象或函数。问题是......