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

Matplotlib.pyplot图例生成多数据点标记,如何设置仅显示单个标记?

解决Matplotlib图例仅显示单个标记的问题

你是不是困惑为啥明明加了numpoints=1,图例里还是显示一堆小圆圈?别着急,我来帮你搞定这个问题,让每个图例条目只显示单个标记。

问题原因

你的代码逻辑其实没问题,但有时候Matplotlib的全局plt.legend()和axes对象的ax.legend()在参数传递上会有小差异,再加上版本兼容的小细节,导致numpoints=1没完全生效。

修正后的代码

直接用面向对象的方式操作axes对象,同时确保numpoints=1参数正确生效:

fig = plt.figure()
ax = plt.subplot(111)
# 绘制充电和放电曲线,用逗号获取返回的Line2D对象(更规范的写法)
charge_line, = ax.plot(cycle, charge_specific_capacity, 'go', label='Charge')
discharge_line, = ax.plot(cycle, discharge_specific_capacity, 'ro', label='Discharge')

# 用axes对象的方法设置标题和坐标轴(比全局plt.xxx更可靠)
ax.set_title('Specific Capacity vs Cycle')
ax.set_ylabel('Specific Capacity (mAh/g)')
ax.set_xlabel('Cycle Number')

# 关键:在ax.legend()中指定numpoints=1,强制每个图例只显示1个标记
ax.legend(loc='upper right', shadow=True, fancybox=True, numpoints=1)

plt.savefig(graph_path_speccap)
plt.show()

原理说明

  • numpoints=1这个参数就是专门用来控制图例中每个条目显示的标记数量的,只要正确传递给legend()函数,就能让图例只显示单个圆圈。
  • 使用ax.set_xxx()替代全局的plt.xxx()方法,能避免多个子图场景下的混淆,也是Matplotlib推荐的编程风格。

如果你的Matplotlib版本是3.6+,也可以用markerfirst=False或者调整handlelength来微调,但上面的代码已经能完美解决你的需求啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:50:51