为什么我在这里得到了一个与plt有关的错误.打印标签?

fig = plt.figure()
ax = plt.gca()
barplt = plt.bar(bins,frq,align='center',label='Dgr')
normplt = plt.plot(bins_n,frq_n,'--r', label='Norm');
ax.set_xlim([min(bins)-1, max(bins)+1])
ax.set_ylim([0, max(frq)])
plt.xlabel('Dgr')
plt.ylabel('Frequency')
plt.show()
plt.legend(handles=[barplt,normplt])

这是我得到的错误:

推荐答案

因为plt.plot可以一次绘制多条线,所以它返回line2D个对象的列表,即使您只绘制一条线(即,在您的情况下,长度为1的列表).抓取图例的句柄时,只需使用此列表的第一项(实际的line2D对象).

有(至少)两种方法可以解决这个问题:

1) 当你调用plt.plot时,在normplt后面加一个逗号,只将列表中的第一项存储在normplt

barplt = plt.bar(bins,frq,width,align='center',label='Dgr')
normplt, = plt.plot(bins_n,frq_n,'--r', label='Norm')   # note the comma after normplt

print normplt
# Line2D(Norm)    <-- This is the line2D object, not a list, so we can use it in legend
...
plt.legend(handles=[barplt,normplt])

2) 拨打plt.legend(normplt[0])时,仅使用列表中的第一项:

barplt = plt.bar(bins,frq,width,align='center',label='Dgr')
normplt = plt.plot(bins_n,frq_n,'--r', label='Norm')

print normplt
# [<matplotlib.lines.Line2D object at 0x112076710>]  
# Note, this is a list containing the Line2D object. We just want the object, 
# so we can use normplt[0] in legend
...
plt.legend(handles=[barplt,normplt[0]])

Python-3.x相关问答推荐

根据其他数据框架的列顺序从数据框架中进行 Select

使用Python装载. iso文件

按长度和字母数字对Pandas 数据帧列进行排序

根据另一列中的条件填写该列中的值

为什么我无法在django中按月筛选事件?

如何将项目添加到Python中具有固定大小的列表列表中

如何在 python 中将带有时区信息的时间戳转换为 utc 时间

requests.exceptions.InvalidSchema:未找到连接适配器.我试图遍历一个列表

使用 GEKKO 使用代码解决最佳时间控制问题时出现 IndexError

找到操作系统的图片文件夹的 CLI

Dask 多阶段资源设置导致 Failed to Serialize 错误

运行 pip install -r requirements.txt 时出错

python3源的类图查看器应用程序

保存 StandardScaler() 模型以用于新数据集

使用自定义比较删除重复项

如何使用 Python 订阅 Websocket API 通道?

如何为 anaconda python3 安装 gi 模块?

Python 无法处理以 0 开头的数字字符串.为什么?

如何从集合中删除多个元素?

如何从 seaborn / matplotlib 图中删除或隐藏 x 轴标签