首页 > 编程问答 >如何在 pyplot 中的条形右侧添加标志/图像

如何在 pyplot 中的条形右侧添加标志/图像

时间:2024-07-23 15:05:45浏览次数:15  
标签:python matplotlib matplotlib-animation matplotlibpyplot

这是我的代码

import matplotlib.pyplot as plt
fig = plt.Figure()
ax = fig.axes[0]
ax.barh(bar_y_corodinates_list, bar_lengths_list, tick_label=countries_list)

这是我想添加标志的地方,即小图像

enter image description here 就像我传递 Y 轴标签的国家/地区列表一样 我想传递光盘中标志图像的路径列表。 我在 文档 中找不到任何开箱即用的选项。 是否可以 ?


Matplotlib 不直接支持在条形图上添加图像作为标记。但是,可以通过覆盖轴上的图像来实现此目的。以下是如何操作:

import matplotlib.pyplot as plt
from matplotlib.offsetbox import OffsetImage, AnnotationBbox

# 示例数据
bar_y_corodinates_list = [1, 2, 3, 4, 5]
bar_lengths_list = [10, 5, 8, 12, 6]
countries_list = ['美国', '中国', '日本', '德国', '英国']
flag_paths = ['us.png', 'china.png', 'japan.png', 'germany.png', 'uk.png'] # 将其替换为的标志文件路径

fig, ax = plt.subplots()
ax.barh(bar_y_corodinates_list, bar_lengths_list, tick_label=countries_list)

# 循环遍历每个条形并在其右侧添加标志
for i, path in enumerate(flag_paths):
    # 加载图像
    img = plt.imread(path)
    imagebox = OffsetImage(img, zoom=0.1) # 调整缩放以适应的标志大小
    ab = AnnotationBbox(imagebox, (bar_lengths_list[i], bar_y_corodinates_list[i]),
                        xycoords='data',
                        frameon=False,
                        box_alignment=(1,0.5)) # (1,0.5) 将图像放置在条的右侧并垂直居中
    ax.add_artist(ab)

plt.show()

此代码执行以下操作:

  1. 导入必要的库: 导入 plt 用于绘图,导入 OffsetImage AnnotationBbox 用于在轴上放置图像。
  2. 加载标志图像: flag_paths 列表中,提供每个国家/地区的标志图像的路径。
  3. 循环遍历每个条形:
  4. 使用 plt.imread 加载当前条形的标志图像。
  5. 使用 OffsetImage 创建一个图像框,并使用 zoom 参数调整图像大小。
  6. 使用 AnnotationBbox 创建一个注释框,该框将图像框放置在指定位置(在此例中,在条形的右侧)。
  7. xycoords='data' 确保使用数据坐标放置图像。
  8. box_alignment=(1,0.5) 将图像水平放置在右侧(1),并垂直居中(0.5)。
  9. 使用 ax.add_artist 将注释框添加到轴。
  10. 显示绘图: plt.show() 显示生成的条形图,其中包含在每个条形右侧的标志。

请记住,需要将 flag_paths 列表中的示例标志文件名替换为实际标志文件的路径。可能还需要根据图像的大小和条形图的尺寸调整 zoom 参数。

标签:python,matplotlib,matplotlib-animation,matplotlibpyplot
From: 78781970

相关文章

  • 尝试从图像 url 中抓取图像(使用 python urllib ),但获取 html
    我尝试从以下网址获取图像。http://upic.me/i/fj/the_wonderful_mist_once_again_01.jpg我可以右键单击并另存为,但是当我尝试使用urlretrievelikeimporturllibimg_url='http://upic.me/i/fj/the_wonderful_mist_once_again_01.jpg'urllib.urlretriev......
  • Python-深度学习算法实用指南-全-
    Python深度学习算法实用指南(全)原文:zh.annas-archive.org/md5/844a6ce45a119d3197c33a6b5db2d7b1译者:飞龙协议:CCBY-NC-SA4.0前言深度学习是人工智能领域最受欢迎的领域之一,允许你开发复杂程度各异的多层模型。本书介绍了从基础到高级的流行深度学习算法,并展示了如何使用......
  • 三种语言实现归并排序(C++/Python/Java)
    题目给定你一个长度为......
  • Python中如何实现字符串的查询和替换?
    在Python中,字符串的查询和替换是编程中常见的任务,它们可以通过Python的内置方法和库来高效实现。这些操作对于文本处理、数据清洗、日志分析等场景尤为重要。下面,我将详细阐述如何在Python中实现字符串的查询和替换,包括基础方法、高级技巧以及在实际应用中的注意事项。字符......
  • Python中的`range()`函数及其用法
    range()函数是Python中的一个内置函数,它用于生成一个数字序列。这个函数在循环结构中尤其有用,因为它允许我们迭代一系列的数字,而无需显式地创建这些数字的列表。range()函数通过指定起始值、结束值(不包括)和步长(可选)来工作,返回一个可迭代对象,通常用于for循环中。下面将......
  • python 的注释(例如数据类)可以扩展到它生成的代码中吗?
    能看出python的注释扩展成​​什么吗?例如,对于与数据类相关的错误,有时试图找出它实际生成的代码有点棘手。例如:@dataclass(order=True)classPerson:name:strage:int=0classPerson:def__init__(self,name:str,age=0):self.name=name......
  • Docker:无法在 docker 映像中使用 pythonnet 和 |无法创建默认的 .NET 运行时,该运行时
    我正在尝试使用clrfromPythonnet使用.DLL引用将一种文件类型转换为另一种文件类型。这就是我的代码的样子-importclrclr.AddReference(dll_path)importRxLibrary#ConverttoASCFormat-----------input_file=f"./{filename}.rxd"......
  • 在 Python 中以非常高的质量保存图像
    如何以非常高的质量保存Python绘图?也就是说,当我不断放大PDF文件中保存的对象时,为什么没有任何模糊?另外,什么是最好的模式将其保存在?png,eps?或者其他的?我不能pdf,因为有一个隐藏的数字会扰乱Latexmk编译。要以非常高的质量保存Py......
  • Python字符串:提取重复和随机合并的子字符串
    重复和合并字符串的示例:16.01068.0%08p%.a.p.a.要提取的所需子字符串:16.008%p.a.完整示例:CCoonnttiinnggeennttCCoouuppoonn16.01068.0%08p%.a.p(.Ma.o(nMtholyn)thly)所需子字符串:ContingentCoupon16.008%p.a.(Monthly)我的问题是当原始......
  • Python Pandas 从使用第 3 部分 API 自动生成的 Excel 文件中读取不一致的日期格式
    我正在使用PDF4meAPI将PDF发票转换为Excel文件。API可以正确读取日期。但是,当我打开Excel文件时,日期显示不一致:某些日期以正确的格式(dd/mm/yyyy)显示,而其他日期以错误的mm/dd/yyyy格式显示。当该月的某天小于或等于12时,似乎会出现这种不一致。......