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

如何在Matplotlib中对齐折线图与散点图的图例标签和手柄

在Matplotlib中实现折线与散点图例的对齐排列

可以实现,核心思路是手动构建图例条目列表,通过添加空占位条目来控制每一行的布局,具体代码如下:

import matplotlib.pyplot as plt
import numpy as np

# 保存折线和散点的绘图对象
lines = []
scatter_map = {}

for i in range(6):
    line, = plt.plot(np.linspace(0,1), np.linspace(0,1)**(i+1))
    lines.append(line)

for i in [0,2,4]:
    scatter = plt.scatter(np.linspace(0,1), np.linspace(0,1)**(i+1))
    scatter_map[i] = scatter

# 构建自定义图例条目:每行两个元素,第二列无散点时用空占位
legend_items = []
for idx in range(6):
    # 添加折线条目
    legend_items.append( (lines[idx], f'{idx}') )
    # 对应位置添加散点或空占位
    if idx in scatter_map:
        legend_items.append( (scatter_map[idx], f'{idx}') )
    else:
        # 空条目:用None作为绘图对象,标签为空字符串
        legend_items.append( (None, "") )

# 创建自定义图例,指定列数并调整间距优化显示
plt.legend(
    handles=[h for h, l in legend_items],
    labels=[l for h, l in legend_items],
    ncol=2,
    handletextpad=0.5,  # 控制图标与文字的间距
    columnspacing=1     # 控制列之间的间距
)

plt.show()

关键说明:

  • 默认图例按绘图对象的创建顺序排列,无法直接实现交叉对齐,因此需要手动定义每个位置的图例条目。
  • 对于没有散点的行,用(None, "")作为空占位条目,确保折线条目在第一列的位置保持对齐,第二列显示空白。
  • 通过handletextpad和columnspacing参数可调整图例间距,让布局更紧凑美观。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 12:35:08