当前位置: 首页 > 面试题库 >

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

闾丘成礼
2023-03-14
问题内容

我想在python动画中添加图例,如下line.set_label()所示。它类似于plt.plot(x,y,label='%d' %*variable*)

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

 from matplotlib import pyplot as plt 
 from matplotlib import animation

fig = plt.figure()

ax = plt.axes(xlim=(0, 2), ylim=(0, 100))

N = 3
lines = [plt.plot([], [])[0] for _ in range(N)]


def init():    
    for line in lines:
        line.set_data([], [])
    return lines

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))
    return lines

anim = animation.FuncAnimation(fig, animate, init_func=init,
                               frames=100, interval=20, blit=True)

plt.show()

问题答案:

我根本不是matplotlib的专家,但是在Double
Pendulum动画中,
它们显示变化的文本,这会导致一些变化,可以为您提供帮助。

要获得具有实际线条颜色的图例,可以将初始设置更改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

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

附录:扩展Line2D

另一个选择 可能
lines.Line2D在动画中扩展和使用这些行,类似于本文的内容。不知道这是否可以与动画一起使用,但是如果您不能使以上内容起作用,那么可能值得尝试。



 类似资料:
  • 问题内容: 我正在尝试使用HTML中的新canvas元素。 我只是想将图像添加到画布,但是由于某种原因它不起作用。 我有以下代码: 的HTML 的CSS JS 图片存在,并且没有JavaScript错误。该图像只是不显示。 这一定是我错过的非常简单的事情… 问题答案: 也许您应该等到图像加载后才能绘制图像。尝试以下方法: 即在图像的onload回调中绘制图像。

  • 注意: Adobe Muse 不再添加新增功能,并将于 2020 年 3 月 26 日停止支持。有关详细信息和帮助,请参阅 Adobe Muse 服务结束页面。 Adobe Edge Animate 是一种 Web 交互式设计工具,可让您使用 HTML5 等 Web 标准向网站添加动画内容。您可以使用 Animate 中直观的时间轴界面形象地构建引人入胜的 HTML5 动画,当访客在所有现代浏览器

  • 我创建了一个进度条,并更改了进度条的颜色。 是否可以像引导动画进度条那样向进度条添加动画? 这里是例子:链接在这里 事实上,我找到了一个解决办法,但这不是一个好办法。 css 我创建了12个css。并使用AnimationTimer循环这12个css。 比如: fxml

  • 问题内容: 我是python的新手,想知道如何在我的程序运行时制作加载动画。我需要这样做是因为我不希望用户认为程序陷入了死循环。我喜欢这样的东西… 正在加载…(点消失并一一出现) 谢谢! 问题答案: 如果您的输出窗口支持回车符,则可以打印它以使光标返回到当前行的开头(前提是您的语句以逗号结尾,因此不会自动打印换行符)。然后,后续打印将覆盖已打印的内容。您可以使用它来做非常简单的单行动画。例: …

  • 问题内容: 我在用 在或中,如果我们向其添加标签,则可以轻松放置图例。但是如果是或 我知道有一个可以显示颜色范围的颜色,但是并不满意。我想要一个带有名称(标签)的 我能想到的是,向矩阵中的每个元素添加标签,然后,尝试legend(),以查看其是否有效,但是如何向元素添加标签(如值)? 就我而言,原始数据如下: 例如,1代表“草”,2代表“沙”,3代表“山” …依此类推。imshow()非常适合我的

  • 我目前正在开发一个图像编辑器应用程序。我试图在我的应用程序中提供一个选项来处理不同的层,比如GIMP或Photoshop。我的方法是为用户添加的每个层添加一个。一切都很好,但不知怎么的,我动态添加的画布没有出现。 在我的类构造函数中,我添加了1个通用画布,它包含一个背景图像,不能编辑。这个画布(它是全球性的)确实显示出来并正常工作。所有可以编辑的层都存储在