You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在已有Matplotlib轴中自动并排放置Logo并适配Footer高度?

Matplotlib Footer轴自动排列Logo问题

需求说明

我们基于已有的Matplotlib图形,在底部添加了一个Footer轴,希望实现:

  • Logo并排摆放,间距支持用户自定义
  • Logo填充Footer轴的高度,同时保持自身宽高比不变

当前实现的可复现代码

from matplotlib.image import imread as read_png
import matplotlib.cbook as cbook
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.axes_grid1 import make_axes_locatable
from matplotlib.offsetbox import AnnotationBbox, OffsetImage

fig = plt.figure(1, figsize=(6, 6))
ax = plt.gca()
ax.set_axis_off()

X, Y = np.meshgrid(np.linspace(-3.0, 3.0, 100),
                   np.linspace(-2.0, 2.0, 100))
Z1 = np.exp(-X**2 - Y**2)
Z2 = np.exp(-(X * 10)**2 - (Y * 10)**2)
z = Z1 * 30 + 50 * Z2

cs = ax.contourf(X, Y, z, cmap='PuBu_r')

ax_divider = make_axes_locatable(ax)
ax_footer = ax_divider.append_axes(
        "bottom", size="10%", pad=0.1)
ax_footer.set_axis_off()

def add_logo(ax, logo, zoom, pos):
    img_logo = OffsetImage(read_png(logo), zoom=zoom)
    logo_ann = AnnotationBbox(
        img_logo, pos, xycoords='axes fraction',
        frameon=False, box_alignment=(0, 0.25))
    at = ax.add_artist(logo_ann)
    return at

add_logo(ax_footer,
         cbook.get_sample_data('grace_hopper.jpg'),
         zoom=0.07,
         pos=(0, 0))

add_logo(ax_footer,
         cbook.get_sample_data('grace_hopper.jpg'),
         zoom=0.07,
         pos=(0.2, 0))

plt.show()

当前实现需要手动设置zoom和pos参数才能让Logo适配Footer空间,无法自动完成排版。请问是否可以自动计算参数实现Logo自动并排并填满Footer轴?或者有更优的实现方案?

此前见过通过定义行列子图放置图片的示例,但我们已有现成的轴,未找到将已有轴拆分为等宽内嵌轴的方法。


最终实现方案(基于社区回答整理)

只要有用于放置Logo的通用轴(仍可通过make_axes_locatable和append_axes创建),即可使用以下函数实现自动排版:

def add_logos(ax, logos, x_padding=10):
    left = 0
    for _, logo in enumerate(logos):
        imdata = read_png(logo)
        w = imdata.shape[1]
        h = imdata.shape[0]
        ax.imshow(imdata,
                  extent=[left, left + w, 0, h])
        left = left + w + x_padding

    # 设置轴范围,避免仅聚焦最后一张图片
    ax.set_xlim(0, left)
    ax.set_ylim(0, h)
    # 将固定宽高比的轴锚定在左侧
    ax.set_anchor('W')

使用示例

add_logos(ax_footer, ["../input/logos/Logonuovo.png",
                      "../input/logos/earth_networks_logo.png"])

内容的提问来源于stack exchange,提问作者Droid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 00:13:18