matplotlib 图例显示 "Container object of 10 artists" 而不是标签
matplotlib legend shows "Container object of 10 artists" instead of label
下面的代码可以正确生成绘图和图例,但是图例不会显示指定的 label
文本,而是显示 "Container object of 10 artists"。
ax = plt.subplot(212)
plt.tight_layout()
l1= plt.bar(X+0.25, Y1, 0.45, align='center', color='r', label='A', edgecolor='black', hatch="/")
l2= plt.bar(X, Y2, 0.45, align='center', color='b', label='N',hatch='o', fill=False)
ax.autoscale(tight=True)
plt.xticks(X, X_values)
ymax1 = max(Y1) + 1
ymax2 = max(Y2) + 1
ymax = max(ymax1,ymax2)+1
plt.ylim(0, ymax)
plt.grid(True)
plt.legend([l1,l2], loc='upper right', prop={'size':20})
输出如下图:
如何在图例上正确显示每个条形图的标签(如 plt.bar()
函数中指定的那样)?
问题源于混合使用 plt.legend()
的两种方法。您有两个选择:
- 手动指定图例的标签
- 使用
ax.get_legend_handles_labels()
填写您传递给 plt.bar()
的 label
参数
要手动指定标签,请将它们作为第二个参数传递给您对 plt.legend()
的调用,如下所示:
plt.legend([l1,l2], ["A", "N"], loc='upper right', prop={'size':20})
如果您想自动填充图例,您可以使用以下方法在图中查找可图例对象及其标签:
handles, labels = ax.get_legend_handles_labels()
ax.legend(handles, labels, loc='upper right', prop={'size':20})
下面的代码可以正确生成绘图和图例,但是图例不会显示指定的 label
文本,而是显示 "Container object of 10 artists"。
ax = plt.subplot(212)
plt.tight_layout()
l1= plt.bar(X+0.25, Y1, 0.45, align='center', color='r', label='A', edgecolor='black', hatch="/")
l2= plt.bar(X, Y2, 0.45, align='center', color='b', label='N',hatch='o', fill=False)
ax.autoscale(tight=True)
plt.xticks(X, X_values)
ymax1 = max(Y1) + 1
ymax2 = max(Y2) + 1
ymax = max(ymax1,ymax2)+1
plt.ylim(0, ymax)
plt.grid(True)
plt.legend([l1,l2], loc='upper right', prop={'size':20})
输出如下图:
如何在图例上正确显示每个条形图的标签(如 plt.bar()
函数中指定的那样)?
问题源于混合使用 plt.legend()
的两种方法。您有两个选择:
- 手动指定图例的标签
- 使用
ax.get_legend_handles_labels()
填写您传递给plt.bar()
的
label
参数
要手动指定标签,请将它们作为第二个参数传递给您对 plt.legend()
的调用,如下所示:
plt.legend([l1,l2], ["A", "N"], loc='upper right', prop={'size':20})
如果您想自动填充图例,您可以使用以下方法在图中查找可图例对象及其标签:
handles, labels = ax.get_legend_handles_labels()
ax.legend(handles, labels, loc='upper right', prop={'size':20})