ChartJs折线图项目图例不显示问题咨询
图例未显示问题原因及修复方案
常见原因
- 调用绘图函数(如
plt.plot()、plt.bar()等)时未传入label参数,plt.legend()无法匹配到需要展示的图例项 - 图例被放置在画布可视区域外:设置
bbox_to_anchor等参数调整图例位置后,未调整画布边距导致图例被裁切 - 多子图绘图场景下,
plt.legend()调用位置错误,未绑定到对应子图的绘图对象 - 手动给
plt.legend()传入handles参数时,传入的绘图对象列表为空或者和labels不匹配 - 调用
plt.legend()后执行了清除图例的相关操作
修复方案
- 给每个需要在图例中展示的绘图语句增加
label参数:
# 错误写法 plt.plot(x, y1) plt.plot(x, y2) plt.legend() # 正确写法 plt.plot(x, y1, label='曲线1') plt.plot(x, y2, label='曲线2') plt.legend()
- 如果是图例超出可视区域,可调用
plt.tight_layout()自动调整画布边距,或者调整图例位置到画布内部:
plt.legend(bbox_to_anchor=(1.05, 1)) plt.tight_layout() # 自动调整画布边距,避免图例被裁切
- 多子图场景下,在每个子图的绘图代码后调用对应子图对象的
legend()方法:
ax1.plot(x, y1, label='曲线1') ax1.legend() ax2.plot(x, y2, label='曲线2') ax2.legend()
- 手动指定
handles时,确保传入的绘图对象和标签一一对应:
line1, = plt.plot(x, y1) line2, = plt.plot(x, y2) plt.legend(handles=[line1, line2], labels=['曲线1', '曲线2'])
内容的提问来源于stack exchange,提问作者ionescho
相关产品推荐
相关产品推荐

