首页 > 编程问答 >如何将图像添加到轴中的条形图(matplotlib)

如何将图像添加到轴中的条形图(matplotlib)

时间:2024-07-29 15:57:22浏览次数:7  
标签:python matplotlib plot figure axes

我想将如下所示的标志图像添加到我的条形图中:

enter image description here

我尝试过 AnnotationBbox,但显示为方形轮廓。谁能告诉我如何完全按照上图实现此目的?

编辑:

下面是我的代码

ax.barh(y = y, width = values, color = r, height = 0.8)

height = 0.8
for i, (value, url) in enumerate(zip(values, image_urls)):
    response = requests.get(url)
    img = Image.open(BytesIO(response.content))

    width, height = img.size
    left = 10
    top = 10
    right = width-10
    bottom = height-10
    im1 = img.crop((left, top, right, bottom)) 
    print(im1.size)
    im1

    ax.imshow(im1, extent = [value - 6, value, i - height / 2, i + height / 2], aspect = 'auto', zorder = 2)

编辑2:

height = 0.8
for j, (value, url) in enumerate(zip(ww, image_urls)):
    response = requests.get(url)
    img = Image.open(BytesIO(response.content))
    ax.imshow(img, extent = [value - 6, value - 2, j - height / 2, j + height / 2], aspect = 'auto', zorder = 2)

ax.set_xlim(0, max(ww)*1.05)
ax.set_ylim(-0.5, len(yy) - 0.5)
plt.tight_layout()

enter image description here


可以使用 Matplotlib 的 imshow 函数将图像添加到条形图中。诀窍是使用 extent 关键字参数来精确定位和缩放图像。

以下是如何操作:

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import requests
from io import BytesIO

# 示例数据
y = ['A', 'B', 'C']
values = [10, 20, 30]
image_urls = [
    "https://i.sstatic.net/1aziz.png",
    "https://i.sstatic.net/1aziz.png",
    "https://i.sstatic.net/1aziz.png"
]

# 创建条形图
fig, ax = plt.subplots()
bars = ax.barh(y, values, color='lightgray', height=0.8)

# 添加图像到每个条形
for i, (bar, url) in enumerate(zip(bars, image_urls)):
    # 获取图像
    response = requests.get(url)
    img = mpimg.imread(BytesIO(response.content))

    # 获取条形位置和高度
    bar_width = bar.get_width()
    bar_height = bar.get_height()
    bar_x = bar.get_x()
    bar_y = bar.get_y()

    # 计算图像的范围以使其适合条形内
    aspect_ratio = img.shape[1] / img.shape[0]
    img_width = bar_height * aspect_ratio * 0.8 # 调整 0.8 以控制图像宽度
    img_height = bar_height * 0.8
    img_x = bar_x + bar_width - img_width - 0.02  # 调整 0.02 以控制图像和条形之间的间距
    img_y = bar_y + (bar_height - img_height) / 2

    # 添加图像到轴
    ax.imshow(img, extent=[img_x, img_x + img_width, img_y, img_y + img_height], aspect='auto', zorder=2)

# 设置轴限制和其他格式
ax.set_xlim(0, max(values) * 1.1)
ax.set_ylim(-0.5, len(y) - 0.5)
plt.tight_layout()
plt.show()

这将创建具有指定图像的条形图,图像位于条形内并根据条形的高度进行缩放。代码还包括通过调整值 0.8 0.02 来控制图像大小和位置的注释。

标签:python,matplotlib,plot,figure,axes
From: 61971090

相关文章

  • Python monorepo 打包,使用 Poetry
    我想将我的Python源代码组织到一个单一存储库中,具有以下基本结构:projectrootdir-libraryone-pyproject.toml-README-src/orgname/libraryone-__init__.py-somemodule.py-webapi-pyproject.toml-README-src/organa......
  • 如何使用Python AST给表达式a == b添加括号?
    请问,有谁知道如何使用PythonAST在代码中为a==b这样的表达式添加括号?我尝试过重写visit_Compare,但是ast.unparse中的delimit_if自动删除了我添加的括号,因为优先级a==b的值更高。你说的对,直接使用ast.unparse会因为优先级问题导致添加的括号被移除。为了解......
  • 使用 powershell 或 python 从网页列出公司名称
    我希望使用PowerShell或python仅列出URL中的公司名称:https://www.moneycontrol.com/markets/earnings/results-calendar/?activeDate=2024-07-29下面是我的python脚本用于获取网页的结构:importrequestsfrombs4importBeautifulSoup#URLo......
  • T3/A40i支持Linux-5.10新内核啦,Docker、Qt、Python统统升级!
    自2021年创龙科技推出全志国产化率100%的T3/A40i工业核心板后,不到两年时间已超过800家工业客户选择创龙科技T3/A40i平台。随着客户产品的不断升级与迭代,部分“能源电力”、“工业自动化”行业客户对T3/A40i的Linux版本提出了更高要求,主要涉及Docker、Qt、Python等组件特性。秉持......
  • 使用 Python 中的多处理防止共享内存中的数据损坏?
    我目前正在开发一个多处理Python程序,其中每个进程将其索引作为连续的4字节整数写入共享内存。并且有一个读取器可以在没有任何锁的情况下读取其他进程的索引。因为我没有使用任何同步原语,所以我担心读取器进程可能会由于逐字节写入内存而读取损坏的数据(例如,一个索引的前2个......
  • Python如何统治AI世界?一文读懂它的优势与挑战
    一、Python语言介绍1.1Python语言概述Python是一种由GuidovanRossum于1991年首次发布的高级编程语言。其设计理念强调代码的可读性和简洁性,使其成为了许多开发者的首选语言。Python的语法简洁直观,采用了缩进来定义代码块,这与其他使用花括号或关键词的编程语言不同。Python......
  • 找到一种方法将program1的输出作为python中program2的输入发送
    有人可以帮我找到一种方法将program1的输出作为python中的program2的输入发送将其保存为.csv文件不会对我有帮助,因为该程序应该尽快执行这些任务。因此我正在寻找一种方法将程序1的终端输出直接发送到程序2在Python中,可以使用子进程模块将一个程序的输出发送到另一个程......
  • 同时运行多个Python程序的最佳方法
    我有一个python程序,我想同时运行多个具有不同参数的实例。这些实例彼此之间不进行通信。在单独的终端中运行每个实例太乏味了。我考虑使用多处理模块将每个实例作为单独的进程运行,但是我希望能够随时停止和重新启动某些单独的实例,而不会中断其他正在运行的实例。是否有任何流程......
  • 替换 Python 数据框中包含值的 <
    我有一个数据框,在某些列中存在诸如“<0.5、<10、<100”等值。如果值仅包含“<”,我想将所有这些值替换为0。我该怎么做?我对Python比较陌生。尝试使用pd.DataFrame.replace()。importpandasaspd#创建示例数据框df=pd.DataFrame({'A':['<0.5','<10',15,20],......
  • 基于funasr+pyaudio实现电脑本地麦克风实时语音识别项目语音转文本python实现
    【框架地址】https://github.com/modelscope/FunASR【简单介绍】FunASR是一个功能全面的语音识别工具包,支持多种预训练模型的推理和微调,提供高精度和高效能的语音识别服务。结合PyAudio库,可以实现电脑本地麦克风实时语音识别项目。该项目首先通过PyAudio库捕获麦克风输入的......