如何在python动画中添加图例/标签

时间:2016-02-28 02:23:36

标签: python matplotlib

我想在python动画中添加一个图例,如下面的^<p> - find <p> at the start of the string (^) and replace it with nothing. </p>$ - find </p> at the end of the string ($) and replace it with nothing. 。它类似于line.set_label()

但是,我发现代码在这里不起作用。动画仅显示更改的行,但没有可用的标签或图例。我该如何解决这个问题?

plt.plot(x,y,label='%d' %*variable*)

2 个答案:

答案 0 :(得分:1)

我根本没有关于matplotlib的专家,但在Double Pendulum animation中他们会显示更改的文本,这会导致一些可以帮助您的变化。

要获得具有线条实际颜色的图例,您可以将初始设置lines更改为:

lines = [plt.plot([], [], label = 'line {}'.format(i))[0] for i in range(N)]

或向line.set_label()函数中的for循环添加init()。这两个似乎都按预期工作。至少如果您在plt.legend(loc="upper left")之前添加plt.show()

然而set_labelanimate()函数中不起作用,但根据链接动画,您可以使用添加到动画中的特定文本字段,这似乎很有效。初始化lines后添加以下代码:

texts = [ax.text(0.80, 0.95-i*0.05,  '', transform=ax.transAxes) for i in range(N)]

并将animate()更改为:

def animate(i):
    for j in range(N):
        lines[j].set_data([0, 2], [10*j,i]) #, label="hei {}".format(i))
        texts[j].set_text('line %d, stage %d'%(j,i))
    return lines

这会将文本放在靠近右上角的位置,并针对每个动画步骤进行更新。由于线条仍然显示其图例,因此您可以简化为仅显示舞台的一个文本。但是我会根据你的判断对信息进行微调。

附录:扩展Line2D

另一个替代方案可能可能扩展lines.Line2D并在动画中使用这些行,类似于this article。不确定这是否适用于动画,但如果你不能使上述工作,这可能值得一试。

答案 1 :(得分:1)

您必须在动画功能中返回图例才能进行渲染。 试试这个,而不是:

legend = plt.legend()
def animate(i):
    for j,line in enumerate(lines):
        line.set_data([0, 2], [10*j,i])
        line.set_label('line %d, stage %d'%(j,i))
    legend.remove()
    legend = plt.legend()
    return lines + [legend]

您还应该在init函数中包含相同的代码,在调整窗口大小时使用init,否则在调整大小时图例将消失