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

如何在matplotlib图例描述中引用其他容器,显示对应标记而非对象字符串

解决方案

要实现图例中同时显示柱状图标记和水平线标记的效果,需要手动自定义图例的handles(绘图对象引用)和渲染规则,具体实现代码如下:

import numpy as np
from matplotlib import pyplot as plt
from matplotlib.legend_handler import HandlerTuple

data = np.arange(5)

fig, ax = plt.subplots()
bar_1 = ax.bar(np.arange(len(data)), data, align="center", label="data")
hline = ax.hlines(data.mean(), 0, len(data), ls="--")

# 自定义图例的绘图对象和对应标签
handles = [
    bar_1, # 第一个图例项:原柱状图
    (bar_1[0], hline) # 第二个图例项:组合柱状图标记 + 水平线标记
]
labels = ["data", "mean of data"]

# 传入自定义配置,HandlerTuple用于处理组合式的图例标记
ax.legend(
    handles=handles,
    labels=labels,
    handler_map={tuple: HandlerTuple(ndivide=None, pad=0.1)}
)

plt.show()

关键逻辑说明

  • bar_1[0]是柱状图容器中的第一个矩形元素,用来代表蓝色柱状图的标记
  • HandlerTuple支持将多个绘图对象组合在同一个图例条目中横向排列,ndivide=None表示不对标记空间做分割,pad参数可以调整两个标记之间的间距
  • 手动构造的handles和labels列表顺序要一一对应,即可完全控制图例的显示内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 07:42:00