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

如何修改Python matplotlib.pyplot图例标记为1、2、3序列号且无需硬编码?

Matplotlib图例标记替换为数字序号的实现方案

基础原理

我们可以通过构造自定义图例对象的方式,保留原有曲线的颜色、线型属性,仅将图例标记替换为对应序号,不需要修改原有的plt.plot绘图逻辑。

1. 硬编码实现(适合固定数量曲线场景)

你可以手动为每条曲线构造对应的图例项,直接指定序号标记:

import matplotlib.pyplot as plt
from matplotlib.lines import Line2D
import numpy as np

# 模拟测试数据
x = np.random.rand(10)
x1 = np.random.rand(10)
y = np.random.rand(10)

# 原有绘图逻辑不变
plt.figure() 
plt.plot(x, 'r+', label='one')
plt.plot(x1, 'go--', label='two')
plt.plot(y, 'ro', label='Three')

# 构造自定义图例
custom_handles = [
    Line2D([], [], marker='1', color='r', linestyle='', markersize=10, label='one'),
    Line2D([], [], marker='2', color='g', linestyle='--', markersize=10, label='two'),
    Line2D([], [], marker='3', color='r', linestyle='', markersize=10, label='Three')
]
plt.legend(handles=custom_handles)
plt.show()

2. 无硬编码自动实现(适合曲线数量不固定的场景)

不需要手动指定每个序号,自动遍历所有已绘制的曲线生成对应序号的图例标记:

import matplotlib.pyplot as plt
from matplotlib.lines import Line2D
import numpy as np

# 模拟测试数据
x = np.random.rand(10)
x1 = np.random.rand(10)
y = np.random.rand(10)

# 原有绘图逻辑不变
plt.figure() 
plt.plot(x, 'r+', label='one')
plt.plot(x1, 'go--', label='two')
plt.plot(y, 'ro', label='Three')

# 自动生成自定义图例
lines = plt.gca().get_lines()
custom_handles = []
# 从1开始遍历所有已绘制的曲线
for idx, line in enumerate(lines, start=1):
    custom_handles.append(Line2D(
        [], [], 
        marker=str(idx),
        # 保留原有曲线的颜色、线型属性
        color=line.get_color(),
        linestyle=line.get_linestyle(),
        markersize=10,
        # 保留原有曲线的标签
        label=line.get_label()
    ))
plt.legend(handles=custom_handles)
plt.show()

该方案会自动匹配你绘制的所有曲线的样式,不管后续新增多少条曲线,都会自动生成对应序号的图例标记,不需要修改任何硬编码内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:15:01