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.
相关产品推荐
相关产品推荐

