找不到绘图标签对象...为什么?

时间:2018-10-01 09:07:47

标签: python matplotlib plot

我认为这是一个简单的代码,但是我不断收到此错误消息,但我不知道为什么:

  

UserWarning:未找到带标签的对象。使用label ='...'   个别地块。 warnings.warn(“未找到带标签的对象。”

我看到了其他解决方案,他们说plt.legend()应该在plot命令之后直接出现...所以我也尝试过,但是没用

这是代码:

x_multi = [int(k[-3:]) for k in data_all_bands.keys()]
colors = ['blue', 'black', 'green', 'red']
for i in range(len(list(data_all_bands.values())[0])):
    y_multi = [v[i] for v in data_all_bands.values()]
    plt_multi = axes[0].scatter(x_multi, y_multi, label="channel" , color = colors[i])#, color=colors[i])
    plt.legend()

该图确实出现了,但是没有标签...在上面的情况下,它应该为每种颜色写4次通道。

编辑:为了重现

data_all_bands是一本字典,看起来像这样:

2016050 [4.2958281793198241, 3.7025449821599157, 5.1717757645735025, 4.9954723025001719]
2016178 [4.0679016016577032, 2.890807214158575, 4.9627629940324081, 4.8505350289087952]
2016290 [3.6947496139720259, 3.1549071645707891, 4.5131724769284824, 4.4082219917836483]
2016114 [3.6302508875834567, 2.9879816559435759, 4.4887321676347716, 4.4042679859883815]

1 个答案:

答案 0 :(得分:1)

您似乎正在创建一个具有多个子图的图形,但仅在第一个图形上进行绘制。您还同时使用了面向对象的API(axes.scatter)和pyplot状态机(plt.legend)。

因此,当您致电plt.legend时,它将在您的一个空子图中查找标签,并向您发出警告。一种解决方案是使用axes[0].legend()为要绘制的子图创建图例:

for i in range(len(list(data_all_bands.values())[0])):
    y_multi = [v[i] for v in data_all_bands.values()]
    plt_multi = axes[0].scatter(x_multi, y_multi, label="channel" , color = colors[i])#, color=colors[i])
    axes[0].legend()