plt.legend()仅显示图例字符串首字母的问题及修复方法
修复Matplotlib图例只显示首字母的问题
嘿,我来帮你搞定这个图例显示的小问题~ 你遇到的情况是因为调用plt.legend()的方式不对,导致Matplotlib把你的字符串标签拆成单个字符处理了。
问题出在哪?
你原来的代码里,每次循环都调用plt.legend(b),这里的b是像'AA'这样的字符串。Matplotlib会把字符串当成可迭代对象,把每个字符当作独立的图例标签。而且每次调用legend()都会覆盖之前的图例设置,最后就只显示了最后一个标签的首字母(或者拆分后的单个字符)。
两种修复方案
方案1:绘图时直接指定标签(推荐)
在调用plt.plot()的时候,通过label参数绑定对应的名称,最后统一调用plt.legend()生成图例就好:
import matplotlib.pyplot as plt bench = ['AA', 'BB'] offset = 0 for b in bench: L1 = [12+offset, 5+offset, 3+offset] L2 = [20+offset, 22+offset, 25+offset] offset += 5 plt.plot(L1, L2, label=b) # 给每条曲线绑定对应标签 plt.legend() # 最后统一生成完整图例 plt.savefig('test4.png') plt.show()
方案2:收集所有标签后一次性传入
如果你不想在绘图时绑定标签,也可以先把所有标签收集到列表里,最后一起传给plt.legend():
import matplotlib.pyplot as plt bench = ['AA', 'BB'] offset = 0 labels = [] for b in bench: L1 = [12+offset, 5+offset, 3+offset] L2 = [20+offset, 22+offset, 25+offset] offset += 5 plt.plot(L1, L2) labels.append(b) plt.legend(labels) # 一次性传入所有标签生成图例 plt.savefig('test4.png') plt.show()
这两种方法都能让图例正确显示AA和BB,不会再只显示首字母啦~
内容的提问来源于stack exchange,提问作者mahmood
相关产品推荐
相关产品推荐

