我想在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*)
答案 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_label
在animate()
函数中不起作用,但根据链接动画,您可以使用添加到动画中的特定文本字段,这似乎很有效。初始化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
这会将文本放在靠近右上角的位置,并针对每个动画步骤进行更新。由于线条仍然显示其图例,因此您可以简化为仅显示舞台的一个文本。但是我会根据你的判断对信息进行微调。
另一个替代方案可能可能扩展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,否则在调整大小时图例将消失