You need to enable JavaScript to run this app. 如何控制绘图图例的标签显示,实现首行仅放置2个重点系列图例项
优惠活动
大模型
产品
解决方案
定价
更多

如何控制绘图图例的标签显示,实现首行仅放置2个重点系列图例项

自定义图例首行固定展示重点系列的可行性说明

这类需求完全可以实现,不需要依赖第三方绘图库,依托Matplotlib自带的图例排版机制就能稳定实现。

核心实现逻辑

Matplotlib的默认图例采用行优先填充规则:传入的句柄与标签列表,会按照顺序从左到右填满每一行,当某行列数达到ncols设定值后自动折到下一行,直到所有条目摆放完成。
要实现“第一行仅展示2个重点系列”的效果,核心是通过手动重组条目顺序、搭配透明占位符的方式,从根源上避免普通系列的标签填充到第一行。

具体操作步骤

  • 绘图阶段单独记录两类系列的返回句柄:2个重点系列的线条/标记句柄,以及剩余普通系列的句柄,不要直接调用ax.get_legend_handles_labels()自动拉取全量条目。
  • 根据设定的ncols值计算需要补充的占位符数量:比如你希望后续普通系列按4列排版,即设置ncols=4,第一行要放2个重点系列,就需要在两个重点句柄后面补充 ncols - 重点系列数量 个完全透明、无可见内容的占位句柄——占位句柄可以直接用matplotlib.patches.Patch(visible=False, label='')生成,不会在图例中显示任何视觉元素,仅用来占据排版位置。
  • 将重组后的完整条目列表(重点句柄 + 占位句柄 + 普通系列句柄)、对应标签列表传给ax.legend(),同时搭配bbox_to_anchor参数把图例移动到绘图区域下方,避免挤占主图内容空间。

注意:不要尝试通过临时调整ncols数值强行让重点系列落在第一行,这种方式会因为系列数量变化出现不可控的排版错位,手动重组句柄列表是这类自定义排版最稳定的实现方案。

备选实现方案

如果不想计算占位符数量,也可以利用Matplotlib支持多图例叠加的特性:单独创建第一个图例,仅放入2个重点系列的条目,固定在绘图区下方的最靠上位置;再创建第二个图例,放入所有普通系列的条目,放在第一个图例的下方位置。这种方案的排版自由度更高,不需要额外计算占位符的数量。

最小可运行代码示例

import matplotlib.pyplot as plt
from matplotlib.patches import Patch

fig, ax = plt.subplots(figsize=(8, 5))
# 绘制2个重点展示系列
line_highlight1, = ax.plot([1,2,3], [1,2,3], color='crimson', linewidth=3, label='重点系列1')
line_highlight2, = ax.plot([1,2,3], [3,2,1], color='navy', linewidth=3, label='重点系列2')
# 绘制8个普通展示系列
normal_lines = []
for idx in range(8):
    l, = ax.plot([1,2,3], [idx+1, idx+2, idx+1], alpha=0.5, label=f'普通系列{idx+1}')
    normal_lines.append(l)

# 自定义排版规则
ncols = 4
# 计算需要补的透明占位符:4列总宽,第一行放2个重点,补2个占位
placeholder_list = [Patch(visible=False, label='') for _ in range(ncols - 2)]
# 重组完整的图例条目顺序
full_handles = [line_highlight1, line_highlight2] + placeholder_list + normal_lines
full_labels = [h.get_label() for h in full_handles]

# 将图例放置在绘图区域下方
ax.legend(
    handles=full_handles,
    labels=full_labels,
    ncols=ncols,
    bbox_to_anchor=(0, -0.12),
    loc='upper left',
    frameon=False
)

plt.tight_layout()
plt.show()

运行上述代码后,图例第一行从左到右会仅展示两个重点系列的标签,后续普通系列会从第二行开始按4列的规则逐行排列,完全匹配自定义排版需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.28 21:54:07